feat: 新增用户状态检查和 api key 准备功能

This commit is contained in:
2026-04-25 16:27:55 +08:00
parent 7d1cc2da1a
commit 5cb72f8579
7 changed files with 252 additions and 4 deletions
+30 -4
View File
@@ -17,16 +17,39 @@
- 当前仅保留以下入口:
- POST /api/auth/register
- POST /api/auth/login
- GET /api/auth/me
- GET /api/auth/logout
- GET /api/auth/ready
- 不再创建 server/api/user 的本地别名路由。
- 对外路径由前端统一调用 auth 前缀,不允许同一业务暴露两套路由。
## 登录状态与环境准备规范
- 登录成功后,后端从 NewAPI Set-Cookie 中提取 session,并写入本项目 httpOnly cookie。
- 前端不得读取、保存或透传 NewAPI session、完整 API Key 等敏感信息。
- 前端通过 /api/auth/me 恢复登录状态,通过 /api/auth/logout 清理登录状态。
- /api/auth/ready 只负责检查当前账号运行环境是否就绪:存在 name 为 AIArtStudio、status 为 1、未删除的 Token 即视为就绪。
- ready 检查不到可用 Token 时,由后端使用固定参数创建 AIArtStudio Token。
- /api/auth/ready 不返回完整 key,也不调用完整 key 获取接口;返回文案使用“环境已准备 / 环境初始化完成”等业务表达,不向前端暴露 API Key 细节。
## 上游请求规范
- 调用上游 NewAPI 必须使用 server/utils/fetch.ts 中的 newApiFetch
- 调用上游 NewAPI 必须使用 server/utils/fetch.ts 中的统一入口
- 普通未登录请求使用 newApiFetch。
- 需要读取上游响应头的请求使用 newApiFetchRaw,目前主要用于登录时提取 Set-Cookie。
- 需要 NewAPI 登录态的请求使用 newApiAuthedFetch,由服务端从 httpOnly cookie 中读取 session 和 userId 后补齐 Cookie 与 New-Api-User。
- 上游基地址只在 fetch.ts 的 BASE_URL 维护一次。
- 禁止在各个 handler 内重复写 baseURL。
- 当前策略是硬编码基地址,按项目要求保持简单直接。
## Token 处理规范
- NewAPI Token 相关通用逻辑放在 server/utils/newApiTokens.ts。
- handler 不直接拼装 Token 列表、创建参数或 ready 判定逻辑。
- Token 列表接口返回的脱敏 key 只用于后端判断,不透出给前端。
- 完整 key 获取接口必须单独设计服务端流程,默认不要在登录或 ready 阶段调用。
- 上游 Token 内部结构类型优先留在 server/utils 内;只有前后端共享的返回契约才放入 shared/types。
## 请求体处理规范
- 所有接口先校验请求体:只接受 JSON 对象或 null。
@@ -45,8 +68,10 @@
- 用户相关请求/响应类型放在 shared/types/user.ts。
- 公共响应类型放在 shared/types/index.ts。
- OpenAI 调用基础类型放在 shared/types/openai.ts。
- 新增接口必须先补类型,再写 handler。
- 每个类型字段都要有中文注释,说明字段含义与可选性。
- 仅前端需要感知的接口契约放入 shared/types;服务端内部上游适配类型不要扩散到 shared。
## 注释规范
@@ -71,9 +96,10 @@
1. 在 shared/types 中定义请求与响应类型,并写字段注释。
2. 在 server/api/auth 新建对应 handler。
3. 在 handler 中完成请求体校验和白名单过滤。
4. 使用 newApiFetch 调用上游接口。
5. 用统一响应工具返回成功与错误结果
6. 自检 TypeScript 报错后再结束
4. 按请求场景选择 newApiFetch、newApiFetchRaw 或 newApiAuthedFetch 调用上游接口。
5. 可复用的业务逻辑优先抽到 server/utils,handler 只负责入参、调用和统一响应
6. 用统一响应工具返回成功与错误结果
7. 自检 TypeScript 报错后再结束。
## 非目标