新增微信登录/注册合一接口、资料完善接口和token刷新接口 重构用户服务层,支持自动维护用户类型和资料完整度 引入JWT认证中间件和请求验证中间件 更新文档与测试用例,支持dist构建部署
3.6 KiB
3.6 KiB
OpenSpec 开发归档
归档日期
- 2026-03-20
归档范围
本次归档覆盖微信小程序后端交互相关接口的设计、实现、规范同步与部署调整,涉及:
- 接口路径统一收敛到
/api - 微信登录/注册合一
- 微信资料完善接口重构
- 微信手机号服务端换取
users_type自动维护- JWT 认证与刷新 token
- PocketBase Token 模式访问
- OpenAPI 与项目文档同步
- dist 构建与部署产物
一、接口演进结果
系统接口
POST /api/test-helloworldPOST /api/health
微信小程序接口
-
POST /api/wechat/login- 登录/注册合一
- 接收
users_wx_code - 自动换取
users_wx_openid - 若无账号则自动创建游客账号
- 返回
status、is_info_complete、token、完整用户信息
-
POST /api/wechat/profile- 从 headers 读取
users_wx_openid - 需要
Authorization - body 接收:
users_nameusers_phone_codeusers_picture
- 服务端调用微信接口换取真实手机号后写入
users_phone
- 从 headers 读取
-
POST /api/wechat/refresh-token- 仅依赖
users_wx_openid - 不要求旧
Authorization - 返回新的 JWT token
- 仅依赖
二、关键业务规则
1. 用户类型 users_type
-
新账号初始化:
游客 -
当且仅当用户首次从:
users_name为空users_phone为空users_picture为空
变为:
- 三项全部完整
时,自动升级为:
注册用户 -
后续资料修改不再覆盖已确定类型
2. 用户资料完整度 is_info_complete
以下三项同时存在时为 true:
users_nameusers_phoneusers_picture
否则为 false
3. 微信手机号获取
服务端使用微信官方接口:
getuserphonenumber
通过 users_phone_code 换取真实手机号,再写入数据库字段 users_phone。
三、鉴权规则
标准请求头
Authorization: Bearer <token>users_wx_openid: <openid>
当前规则
/api/wechat/login:不需要 token/api/wechat/profile:需要users_wx_openid + Authorization/api/wechat/refresh-token:只需要users_wx_openid
四、请求格式规则
所有微信写接口统一要求:
Content-Type: application/json
不符合时返回:
415 请求体必须为 application/json
五、PocketBase 访问策略
当前统一使用:
POCKETBASE_API_URLPOCKETBASE_AUTH_TOKEN
已移除:
POCKETBASE_USER_NAMEPOCKETBASE_PASSWORD
六、部署与产物
后端已支持 dist 构建:
npm run build- 产物目录:
back-end/dist/
当前发布目录包含:
dist/src/dist/spec/dist/package.jsondist/package-lock.jsondist/.env
生产启动方式:
npm start- 实际运行:
node dist/src/index.js
七、文档同步结果
已同步更新:
back-end/spec/openapi.yamldocs/api.mddocs/deployment.mdREADME.md
其中 openapi.yaml 已与当前真实接口行为对齐。
八、质量验证结果
本次归档前已验证通过:
npm run lintnpm run testnpm run build
测试覆盖包括:
- 系统接口
- 统一 404
- 登录/注册合一
- 非 JSON 拒绝
- 资料更新
- token 刷新
users_type升级逻辑is_info_complete返回逻辑
九、当前已知边界
refresh-token当前仅依赖users_wx_openid,未校验旧 token- 微信手机号能力依赖微信官方
access_token与users_phone_code - 当前后端为 JavaScript + Express 架构,未引入 TypeScript 编译链