AI 应用提示工程人工智能前端【免费下载链接】ChatGPT-ShortcutStop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor · Русский 한국어 العربية हिन्दी ไทย 别再从头写提示词现成的拿来就用好用的收进自己的库项目地址https://gitcode.com/gh_mirrors/ch/ChatGPT-Shortcut点击查看免费下载ChatGPT-ShortcutAiShort是一个可搜索的提示词库支持 ChatGPT、Claude、Gemini 与 Cursor 等多个 AI 工具。它允许匿名使用但只有登录后才能收藏提示词、创建自定义提示词、分享到社区并在多台设备间同步「我的收藏」。本文基于仓库中的账户指南文档i18n/de/docusaurus-plugin-content-docs/current/guides/account.md与对应前端源码完整讲解三种登录方式、注册流程、「我的账户」页面的个人资料与密码管理、L0–L9 等级体系以及数据导出/导入/缓存清除的实现细节帮助读者既会用这些功能又理解它们背后的 API 调用链与本地缓存机制。为什么账号是可选的站点本身是无账号可用的浏览提示词、搜索、复制提示词都不需要登录。登录的价值在于收藏精选提示词与社区提示词到「我的收藏」创建、编辑、删除自己的自定义提示词可公开分享或设为私密将上述数据按账户存储实现跨设备、跨浏览器同步。从前端结构看整个身份体系围绕 src/components/AuthContext.tsx 展开登录成功后 JWT 写入localStorage的auth_tokenAuthProvider 再拉取/myspace等用户数据并维护全局状态页面组件收藏视图、用户中心都从该 Context 读取。三种登录方式登录对话框提供「密码登录」和「免密登录」两个 Tab外加一键 Google 登录。在 src/components/user/login.tsx 中对话框通过viewStatelogin/register/forgot-password和loginTypepassword/code两个状态切换不同表单视图所有请求最终汇聚到 src/api/auth.ts 导出的接口函数。密码登录使用用户名或注册邮箱 密码登录。对应源码为login()export async function login(values: { username: string; password: string }) { const response await apiClient.post(/auth/local, { identifier: values.username, password: values.password, }); clearUserCachesOnLogin(); // 清除旧用户的 USER_PROFILE 与 MySpace 缓存 return response; }两个实现细节值得注意identifier 即用户名或邮箱——接口不区分二者用户填哪个后端都能识别这与 UI 中「用户名/邮箱」的占位符提示一致登录后先清缓存——clearUserCachesOnLogin()会同时清掉USER_PROFILE与MySpace两块本地缓存防止上一个账号的残留 ETag 与新账号巧合命中源码注释明确指出这是为避免旧账号数据串到新账号。登录成功后 src/components/user/login.tsx 中的handleSuccess会把 JWT 存入localStorage(auth_token)通过window.postMessage向浏览器扩展页发送{ action: login, username, jwt }消息让浏览器扩展也能感知登录状态然后刷新页面。免密登录登录链接适合「只是偶尔登录一次」的用户无需记忆密码切到「免密登录」Tab输入注册邮箱或用户名点击「获取登录链接」系统向你的邮箱发送一条登录链接点击邮件中的链接完成登录。源码上有两点比文档更细前端 src/components/user/login.tsx 的handleSendPasswordlessLink会用正则/\S\S\.\S/判断输入是否为邮箱格式是邮箱就发{ email }不是就发{ username }所以用户名同样能收到登录链接接口分两步sendPasswordlessLink()向POST /passwordless/send-link发请求取链接用户点击邮件中的链接后页面携带loginToken调loginWithToken()执行GET /passwordless/login?loginToken...拿回jwt后同样执行persistAuthToken 清缓存与密码登录走同一条状态落地路径。Google 一键登录在登录对话框点击「Login via Google」即可首次通过 Google 登录时系统会自动为你创建账户无需单独注册。从 src/api/auth.ts 的实现看Google 登录是一个完整的 OAuth 重定向流程且由USE_LEGACY_GAUTH开关见 src/api/config.ts在两套后端流程间切换配置流程USE_LEGACY_GAUTH false当前默认前端拼接${GAUTH_API_BASE}/api/connect/google?redirectorigin/user/auth由 Strapi 原生 OAuth 路由接管回调时把jwt与user带回前端USE_LEGACY_GAUTH true旧版先请求/strapi-google-auth/init获取跳转 URL授权后用code调/strapi-google-auth/user-profile换取 token再调/me拉取用户信息关键常量与路径均来自 src/api/config.ts 与 src/api/auth.tsexport const API_URL https://api.newzone.top/api; // 主 APIStrapi 后端 export const GAUTH_API_BASE https://gauth.aishort.top; // Google OAuth 入口服务 export const USE_LEGACY_GAUTH false;配置注释解释了为什么需要独立的gauth服务主服务器所在网络无法直连 Google因此 OAuth 入口被拆到独立域名。前端侧handleGoogleLogin会打开一个 520×570 的弹出窗口展示加载动画跳转到认证 URL授权完成后window的message事件监听器捕获回传的jwt/access_token/code等载荷调用googleLogin()完成认证。若弹窗被浏览器拦截会提示「Pop-up window blocked」。登录态的本地校验JWT 并非「存了就算数」。src/components/AuthContext.tsx 中的isValidToken会在本地解码 JWT 的payload.exp并与当前时间比较预留 60 秒时钟偏差余量过期的 token 会被直接删除并视为未登录避免拿着失效凭证反复请求后端解析失败时则保守地认为有效防止误登出。此外 AuthProvider 采用 stale-while-revalidate 策略——刷新页面时先用本地缓存的user_auth立即渲染避免登录状态「闪烁」。注册账户在登录对话框点击「立即注册」切到注册视图填写用户名、邮箱、密码并勾选同意服务条款与隐私政策提交后自动完成登录。表单校验规则src/components/user/login.tsx 顶部的rules给出了具体约束用户名必填密码必填且至少 6 个字符邮箱必填且需通过邮箱格式校验注册必须勾选同意框否则报错「使用前须同意服务条款和隐私政策」。注册请求由 src/api/auth.ts 的register()发出POST /auth/local/register载荷为{ username, email, password }。与密码登录复用同一个handleAuth成功处理器——返回的jwt落盘、postMessage通知扩展、500ms 后刷新页面所以注册完即处于登录态。我的账户页面登录后进入「我的账户」页src/pages/user/index.tsx页面未加载到用户信息时会在 2 秒后自动跳回首页即未登录访问会重定向。页面分为三块用户信息、安全设置、数据管理。修改用户名点击用户名旁的编辑图标输入新用户名并点保存。源码对应submitNewUsername调用 src/api/user.ts 的updateUsername()即PUT /favorites/update-username载荷{ newUsername }成功后重新拉取用户信息刷新页面。接口名带favorites前缀可以推断后端把「显示名」归在收藏/社区可见性相关的控制器里管理改名会同步影响该用户提示词在社区的展示。修改密码与忘记密码修改密码三步填写当前密码 → 填写并确认新密码 → 点「修改密码」对应 src/api/auth.ts 的changePassword()POST /auth/change-password载荷为{ currentPassword, newPassword, confirmPassword }其中新密码以password与passwordConfirmation两个字段提交。这里有一个源码中才能发现的细节src/pages/user/index.tsx 中「当前密码」输入框只在userInfo?.provider local时渲染。也就是说通过 Google 登录的账户provider 不是 local修改密码时无需填写当前密码只需设置新密码——这也意味着 Google 账户可以「补一个密码」之后即可用密码登录。忘记密码有两条入口登录对话框的「忘记密码」以及「我的账户 → 安全设置」右上角的「忘记密码」按钮。两者都调用 src/api/auth.ts 的forgotPassword()POST /auth/forgot-password向注册邮箱发送重置邮件然后点击邮件中的链接由 src/pages/reset-password.tsx 页面处理最终重置对应resetPassword()POST /auth/reset-password载荷{ code, newPassword, confirmPassword }其中code来自邮件链接。等级体系L0–L9账户页会展示你的LevelL0–L9与升到下一级的进度。等级由你分享到社区的提示词数量决定——注意统计的是share为真的自定义提示词src/pages/user/index.tsx 中userprompts.filter((p) p.share).length收藏数、浏览数都不计入。具体阈值曲线定义在 src/components/LevelSystem.tsxexport const LEVEL_THRESHOLDS [0, 1, 3, 8, 18, 35, 60, 100, 160, 260];等级名称所需分享提示词数L0萌新探索者0L1青铜≥ 1L2白银≥ 3L3黄金≥ 8L4铂金≥ 18L5钻石≥ 35L6蓝宝石≥ 60L7红宝石≥ 100L8翡翠≥ 160L9星辉≥ 260相邻等级跨距依次为 1、2、5、10、17、25、40、60、100约 1.6–2 倍递增曲线平滑L9 被定位为「传奇」档。页面显示的进度百分比为min(100, sharedCount / next * 100)达到 L9 后显示「MAX REACHED」。等级图标是一组随等级累积几何元素的 SVG 多边形src/components/LevelSystem.tsx 的LevelIconL7 加中心圆点、L8 加粗描边、L9 加 8 条辐射线纯 stroke 绘制、跨平台不依赖 emoji 字体。数据管理「我的账户 → 数据管理」提供三个操作清除缓存、导出提示词、导入提示词。清除缓存点击「清除所有缓存」带二次确认弹窗会执行 src/pages/user/index.tsx 的handleClearCacheclearUserProfileCache(); // 清除 USER_PROFILE 缓存 clearMySpaceCache(); // 清除 MYSPACE 缓存 await fetchUserInfo(); // 重新拉取用户数据它只刷新本地缓存不会删除任何服务端数据收藏与自定义提示词都保存在账户里清缓存只是丢弃浏览器里的旧副本并重新同步。文档建议的使用场景正是「数据不同步或显示异常」时的第一步自救——因为前端大量使用 ETag TTL 缓存见 src/api/user.ts 中getUserAllInfo对If-None-Match/ 304 的处理偶发不一致时清缓存可强制重新协商。导出提示词点「导出数据」生成一个 JSON 文件并自动下载文件名形如my-prompts-2026-09-24.json当天日期。src/pages/user/index.tsx 的handleExportPrompts会先批量拉取自定义提示词、收藏的精选卡cards与社区提示词commus的完整数据再组装导出结构{ exportTime: ISO8601 时间戳, prompts: [ // 全部自定义提示词 { id: 1, title: …, prompt: …, remark: …, notes: …, share: true } ], favorites: { card: [3, 7], community: [12] }, // 收藏 ID 列表导入用 favoriteDetails: [ /* 收藏的详细内容仅供人工查看导入时忽略 */ ], myspaceOrder: [ /* MySpace 卡片顺序type/source/id 三元组 */ ], customTags: [ /* 自定义标签定义 */ ] }字段含义上值得注意prompts里prompt字段对应后端存储的descriptionshare表示该提示词是否已分享到社区favoriteDetails与myspaceOrder、customTags是备份性质的快照当前联网版导入时不会用它们恢复排序与标签源码注释解释了原因排序/标签中的 ID 属于源用户覆盖式写入会破坏目标用户已有的体系。导入提示词选择 JSON 文件导入handleImportPrompts的实现比文档描述复杂得多兼容三种输入格式纯数组[ { title, prompt, … } ]对象{ prompts: [...], favorites: { card: [], community: [] } }即导出文件本身单个提示词对象{ title, prompt|description }。规范化时以prompt || description作为正文过滤掉缺title或缺正文的条目。冲突处理策略分四种情形情形行为有id且属于当前用户内容与现有完全一致跳过skipped有id且属于当前用户内容有差异按id更新该提示词无id新建share默认取文件值缺省为公开true有id但不属于当前用户作为新的私密提示词创建share: false防止误覆盖他人数据收藏导入采用增量合并只把本地不存在的favorites.card/favorites.communityID 通过PATCH /favoritesloves.add/commLoves.add合并进现有收藏不做删除且服务端按 merge 语义处理以保证多设备并发安全。全部任务用Promise.allSettled并发执行完成后汇总「成功 / 跳过 / 失败」数量并给出「全部成功」「部分导入成功 (x/y)」「导入失败」三档提示最后调用refreshUserAuth()刷新 MySpace 视图。小结账户数据流全景把本文涉及的端点串起来AiShort 账户体系的完整调用链为认证POST /auth/local/register注册、POST /auth/local密码登录、POST /passwordless/send-linkGET /passwordless/login免密、GET /api/connect/googleOAuth、POST /auth/change-password、POST /auth/forgot-passwordPOST /auth/reset-password账户数据GET /users/meETag 缓存、PUT /favorites/update-username改名、GET /myspace收藏 自定义提示词聚合前端职责JWT 本地过期校验、Stale-While-Revalidate 缓存、登录后强制清缓存、乐观更新 失败回滚。所有认证请求集中封装在 src/api/auth.ts端点基址集中在 src/api/config.ts便于整体替换后端页面层则分别是 src/components/user/login.tsx登录/注册/忘记密码对话框与 src/pages/user/index.tsx我的账户。相关文档入门指南基本使用方法我的收藏收藏与自定义标签管理自定义提示词创建、编辑、分享与导出提示词赞分享AI 应用提示工程人工智能前端【免费下载链接】ChatGPT-ShortcutStop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor · Русский 한국어 العربية हिन्दी ไทย 别再从头写提示词现成的拿来就用好用的收进自己的库项目地址https://gitcode.com/gh_mirrors/ch/ChatGPT-Shortcut点击查看免费下载相关推荐Meteor 用户与账户系统完全指南密码登录、无密码登录、2FA 与 OAuth 集成实战Meteor 用户与账户系统完全指南密码登录、无密码登录、2FA 与 OAuth 集成实战 导读 本文以 Meteor 官方教程 Users and Acc后端前端开发工具移动开发docker-mailserver 的 Dovecot Master Accounts主账户详解跨账户管理登录与热备份实践docker mailserver 的 Dovecot Master Accounts主账户详解跨账户管理登录与热备份实践 导读 本文围绕 docker后端通信云原生downkyi账户登录记录查看检查账号的登录历史downkyi账户登录记录查看检查账号的登录历史 一、登录记录审计的安全价值 B站用户账号面临的登录风险呈现三大特征 | 风险类型 | 技术原理 | 检测难上一篇告别游戏窗口边框Borderless Gaming 终极使用指南下一篇Wasp 语言.wasp DSL完全指南声明式配置与类型系统深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
