3.1 KiB
3.1 KiB
/api/auth/me 查询落地设计
日期:2026-04-21
1. 文档目的
这份文档用于指导 M2 中 实现 me 查询 任务的首版落地,冻结:
GET /api/auth/me的请求与响应 contract。- 当前阶段 Bearer JWT 与用户快照读取的衔接方式。
availableLoginMethods的返回口径。- JWT 有效但本地用户不存在时的错误处理语义。
2. 当前基线
当前 Node /api/auth/me 具备以下最小语义:
- 必须先通过 Bearer JWT 校验。
- 用
sub = user_id读取当前用户。 - 返回
user + availableLoginMethods。 availableLoginMethods只返回当前对外开启的补充登录方式,不包含password。
Rust 首版需要保留这条最小 contract,但当前阶段允许继续使用进程内仓储承接用户真相。
3. 当前阶段范围
本阶段只落以下内容:
module-auth增加按user_id查询当前用户能力。api-server暴露GET /api/auth/me。- 返回与当前前端兼容的
user + availableLoginMethods。
本阶段不包含:
refresh token轮换。- 会话列表、审计、风控等扩展信息。
SpacetimeDB真正的身份表读取。
4. contract
4.1 请求
- 方法:
GET - 路径:
/api/auth/me - 鉴权:
Authorization: Bearer <token>
4.2 成功响应
{
"user": {
"id": "user_00000001",
"username": "guest_001",
"displayName": "guest_001",
"phoneNumberMasked": null,
"loginMethod": "password",
"bindingStatus": "active",
"wechatBound": false
},
"availableLoginMethods": []
}
说明:
- 当前阶段
user字段固定返回当前登录用户快照,不返回null。 availableLoginMethods只按当前对外配置返回:SMS_AUTH_ENABLED=true时包含phoneWECHAT_AUTH_ENABLED=true时包含wechat
password不进入availableLoginMethods,保持和 Node 现状一致。
5. 错误语义
5.1 缺少或非法 Bearer token
- 返回
401 UNAUTHORIZED
5.2 JWT 有效但用户不存在
- 返回
401 UNAUTHORIZED - 语义视为“当前登录态已失效,需要重新登录”
说明:
- 当前阶段不把这种情况返回为
404。 - 这样可以与后续
token_version、会话吊销和用户禁用策略保持同一类恢复路径。
6. crate 边界
6.1 module-auth
负责:
- 提供按
user_id查询当前用户快照的能力。 - 继续复用密码登录阶段已经建立的同一份进程内用户真相。
6.2 api-server
负责:
- 复用现有 Bearer JWT 中间件拿到
sub。 - 调用
module-auth查询用户。 - 组装
AuthMeResponse。
7. 测试策略
至少覆盖:
- 已登录用户可通过
/api/auth/me取回当前用户。 - 当短信/微信开关开启时,
availableLoginMethods返回对应值。 - JWT 有效但用户不存在时返回
401。
8. 后续衔接
这条任务完成后,下一步顺序固定为:
- refresh token 轮换
- 会话吊销
- 手机验证码登录
微信登录继续按“暂缓执行”处理。