feat: 增强 PocketBase hooks 认证功能

- 更新微信登录、平台注册/登录、资料更新、token 刷新、认证落库等功能,统一使用 openid 作为全平台身份锚点。
- 新增平台用户注册和登录接口,支持手机号和密码认证。
- 实现系统级 token 刷新接口,支持通过微信 code 重新签发 token。
- 新增用户总数查询接口,返回 tbl_auth_users 表中的用户总数。
- 更新 OpenAPI 文档,反映新的接口和数据结构。
- 修改数据库结构,调整字段名称和索引。
- 新增页面示例,展示基本的 HTML 页面结构。
This commit is contained in:
2026-03-25 20:03:46 +08:00
parent 02d5686c7b
commit 6490fc427f
20 changed files with 971 additions and 90 deletions

View File

@@ -31,9 +31,11 @@ pocket-base/
- `POST /api/system/test-helloworld`
- `POST /api/system/health`
- `POST /api/system/refresh-token`
- `POST /api/platform/register`
- `POST /api/platform/login`
- `POST /api/wechat/login`
- `POST /api/wechat/profile`
- `POST /api/wechat/refresh-token`
> 当前自定义路由统一使用 `/api/...` 前缀。
@@ -43,6 +45,37 @@ pocket-base/
- `Open-Authorization` 不是本项目接口定义的 Header如调试工具里出现通常是工具全局预设应删除。
- `users_wx_openid` Header 已移除,不再需要客户端额外传递。
- 当前用户身份以 PocketBase auth record 中的 `openid` 字段为准。
- `openid` 现已定义为**全平台统一身份锚点**
- 微信用户:`openid = 微信 openid`
- 平台用户:`openid = 服务端生成的 GUID`
- 当前登录/注册成功后返回的 `token` 为 PocketBase 原生 auth token可直接用于 PocketBase SDK 与本项目 hooks 接口调用。
## 平台用户与微信用户说明
### 平台用户
- 注册接口:`POST /api/platform/register`
- 登录接口:`POST /api/platform/login`
- 平台用户注册时会自动生成 GUID 并写入 `tbl_auth_users.openid`
- 同时写入 `users_idtype = ManagePlatform`
- 平台登录对前端暴露为 `users_phone + password`
- 服务端内部仍使用 PocketBase 原生 password auth以确保返回原生 `token`
### 通用认证能力
- 刷新 token 接口:`POST /api/system/refresh-token`
- 该接口属于系统级通用认证接口,不区分微信用户或平台用户
- body 中 `users_wx_code` 允许为空
- 服务端会优先验证 `Authorization`:若 token 仍有效,直接续签,不调用微信接口
- 仅当 token 失效时,且提供了 `users_wx_code`,才走微信 code 重签流程(逻辑独立于 `/api/wechat/login` 的完整返回)
- 若 token 失效且未提供 `users_wx_code`,返回:`token已过期请上传users_wx_code`
- 返回体为精简结构,仅返回新 `token`
### 微信用户
- 登录/注册接口:`POST /api/wechat/login`
- 微信用户以微信 code 换取微信侧 openid并写入统一 `tbl_auth_users.openid`
- 首次注册时写入 `users_idtype = WeChat`
## 部署方式
@@ -126,10 +159,12 @@ PocketBase JSVM 不是 Node.js 运行时:
本次变更重点包括:
- 微信登录链路错误显式返回
- 平台用户注册/登录接口补充完成
- 刷新 token 接口调整到 system 分类
- `recordAuthResponse` 使用空 `authMethod`
- active hooks 中移除 `-created` 排序
- `users_phone` 索引由唯一改为普通索引
- `tbl_auth_users``openid` 为业务身份锚点
- `tbl_auth_users`全平台统一 `openid` 为业务身份锚点
- auth 集合兼容占位 `email`、随机密码与 `passwordConfirm`
## 与原项目关系