feat: 完善微信认证功能,新增用户资料更新与token刷新接口
- 新增 userService.js,包含用户认证、资料更新、token 刷新等功能 - 新增 wechatService.js,处理微信API交互,获取openid和手机号 - 新增 appError.js,封装应用错误处理 - 新增 logger.js,提供日志记录功能 - 新增 response.js,统一成功响应格式 - 新增 sanitize.js,提供输入数据清洗功能 - 更新 OpenAPI 文档,描述新增接口及请求响应格式 - 更新 PocketBase 数据库结构,调整用户表字段及索引策略 - 增强错误处理机制,确保错误信息可观测性 - 更新变更记录文档,详细记录本次变更内容
This commit is contained in:
114
docs/ARCHIVE.md
114
docs/ARCHIVE.md
@@ -2,6 +2,120 @@
|
||||
|
||||
## 归档日期
|
||||
|
||||
- 2026-03-23
|
||||
|
||||
## 归档范围
|
||||
|
||||
本次归档覆盖 PocketBase hooks 项目在微信登录注册、PocketBase 原生 token、openid 身份收敛、错误观测、索引修复与 auth 兼容字段方面的修复与规范同步,涉及:
|
||||
|
||||
- `pocket-base/` 作为正式 hooks 项目继续收敛规范
|
||||
- 微信登录链路错误显式返回
|
||||
- `recordAuthResponse` 使用空 `authMethod`
|
||||
- 登录/资料更新阶段 auth 保存失败信息透传
|
||||
- 移除 hooks 查询中的 `-created` 排序,修复 `invalid sort field "created"`
|
||||
- `users_phone` 唯一索引改普通索引,允许空手机号用户注册
|
||||
- `tbl_auth_users` 继续以 `openid` 作为业务身份锚点
|
||||
- 为 PocketBase `auth` 集合兼容写入占位 `email`、随机密码与 `passwordConfirm`
|
||||
- OpenSpec 变更文档补录到 `pocket-base/spec/`
|
||||
|
||||
---
|
||||
|
||||
## 一、接口与认证结果
|
||||
|
||||
### 当前 active hooks 接口
|
||||
|
||||
- `POST /api/system/test-helloworld`
|
||||
- `POST /api/system/health`
|
||||
- `POST /api/wechat/login`
|
||||
- `POST /api/wechat/profile`
|
||||
- `POST /api/wechat/refresh-token`
|
||||
|
||||
### 当前认证规则
|
||||
|
||||
- 正式鉴权仅使用 `Authorization: Bearer <token>`
|
||||
- `Open-Authorization` 不属于接口契约
|
||||
- `users_wx_openid` Header 已移除
|
||||
- 业务身份由当前 auth record 的 `openid` 唯一确定
|
||||
|
||||
---
|
||||
|
||||
## 二、数据模型与落库策略
|
||||
|
||||
### 1. `tbl_auth_users`
|
||||
|
||||
- 维持 PocketBase `auth` 集合
|
||||
- 业务身份锚点为 `openid`
|
||||
- 目标规则:除 `openid` 外,自定义业务字段均允许为空
|
||||
|
||||
### 2. auth 集合兼容字段
|
||||
|
||||
由于 `tbl_auth_users` 是 auth 集合,为满足 PocketBase 原生 auth 保存要求,登录创建阶段补充:
|
||||
|
||||
- `email = <openid>@wechat.local`
|
||||
- 随机密码
|
||||
- `passwordConfirm`
|
||||
|
||||
说明:
|
||||
|
||||
- 上述 `email` 为占位认证标识,不代表真实邮箱。
|
||||
|
||||
---
|
||||
|
||||
## 三、问题修复归档
|
||||
|
||||
### 1. 通用 400 `Something went wrong while processing your request.`
|
||||
|
||||
处理方式:
|
||||
|
||||
- 登录路由本地 try/catch 显式返回 `{ code, msg, data }`
|
||||
- 全局错误包装提前注册
|
||||
- 保存 auth 用户时透传原始错误信息
|
||||
|
||||
### 2. `invalid sort field "created"`
|
||||
|
||||
原因:
|
||||
|
||||
- hooks 内多个精确查询误用了 `-created` 排序
|
||||
|
||||
处理方式:
|
||||
|
||||
- 统一移除 active hooks 中所有 `-created` 排序
|
||||
|
||||
### 3. 注册成功前数据库无新记录
|
||||
|
||||
已识别的高风险点:
|
||||
|
||||
- `users_phone` 唯一索引会让空手机号重复冲突
|
||||
|
||||
处理方式:
|
||||
|
||||
- 改为普通索引
|
||||
- 手机号唯一性改由资料完善阶段业务校验负责
|
||||
|
||||
---
|
||||
|
||||
## 四、规范同步位置
|
||||
|
||||
本次 OpenSpec 记录新增:
|
||||
|
||||
- `pocket-base/spec/changes.2026-03-23-pocketbase-hooks-auth-hardening.md`
|
||||
|
||||
当前 active 契约文件:
|
||||
|
||||
- `pocket-base/spec/openapi.yaml`
|
||||
|
||||
---
|
||||
|
||||
## 五、当前边界
|
||||
|
||||
1. `tbl_auth_users` 作为 PocketBase `auth` 集合,仍受 PocketBase 内置 auth 规则影响。
|
||||
2. schema 脚本放宽自定义字段必填约束时,PocketBase 服务端更新 auth 集合可能返回通用 500,需要结合服务端日志进一步确认。
|
||||
3. 若线上仍报旧错误,通常表示最新 hooks 或 schema 尚未部署生效。
|
||||
|
||||
---
|
||||
|
||||
## 归档日期
|
||||
|
||||
- 2026-03-20
|
||||
|
||||
## 归档范围
|
||||
|
||||
Reference in New Issue
Block a user