Files
Genarrative/docs/technical/AUTH_ME_QUERY_DESIGN_2026-04-21.md
kdletters cbc27bad4a
Some checks failed
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

3.1 KiB
Raw Permalink Blame History

/api/auth/me 查询落地设计

日期:2026-04-21

1. 文档目的

这份文档用于指导 M2实现 me 查询 任务的首版落地,冻结:

  1. GET /api/auth/me 的请求与响应 contract。
  2. 当前阶段 Bearer JWT 与用户快照读取的衔接方式。
  3. availableLoginMethods 的返回口径。
  4. JWT 有效但本地用户不存在时的错误处理语义。

2. 当前基线

当前 Node /api/auth/me 具备以下最小语义:

  1. 必须先通过 Bearer JWT 校验。
  2. sub = user_id 读取当前用户。
  3. 返回 user + availableLoginMethods
  4. availableLoginMethods 只返回当前对外开启的补充登录方式,不包含 password

Rust 首版需要保留这条最小 contract但当前阶段允许继续使用进程内仓储承接用户真相。

3. 当前阶段范围

本阶段只落以下内容:

  1. module-auth 增加按 user_id 查询当前用户能力。
  2. api-server 暴露 GET /api/auth/me
  3. 返回与当前前端兼容的 user + availableLoginMethods

本阶段不包含:

  1. refresh token 轮换。
  2. 会话列表、审计、风控等扩展信息。
  3. SpacetimeDB 真正的身份表读取。

4. contract

4.1 请求

  1. 方法:GET
  2. 路径:/api/auth/me
  3. 鉴权:Authorization: Bearer <token>

4.2 成功响应

{
  "user": {
    "id": "user_00000001",
    "username": "guest_001",
    "displayName": "guest_001",
    "phoneNumberMasked": null,
    "loginMethod": "password",
    "bindingStatus": "active",
    "wechatBound": false
  },
  "availableLoginMethods": []
}

说明:

  1. 当前阶段 user 字段固定返回当前登录用户快照,不返回 null
  2. availableLoginMethods 只按当前对外配置返回:
    • SMS_AUTH_ENABLED=true 时包含 phone
    • WECHAT_AUTH_ENABLED=true 时包含 wechat
  3. password 不进入 availableLoginMethods,保持和 Node 现状一致。

5. 错误语义

5.1 缺少或非法 Bearer token

  1. 返回 401 UNAUTHORIZED

5.2 JWT 有效但用户不存在

  1. 返回 401 UNAUTHORIZED
  2. 语义视为“当前登录态已失效,需要重新登录”

说明:

  1. 当前阶段不把这种情况返回为 404
  2. 这样可以与后续 token_version、会话吊销和用户禁用策略保持同一类恢复路径。

6. crate 边界

6.1 module-auth

负责:

  1. 提供按 user_id 查询当前用户快照的能力。
  2. 继续复用密码登录阶段已经建立的同一份进程内用户真相。

6.2 api-server

负责:

  1. 复用现有 Bearer JWT 中间件拿到 sub
  2. 调用 module-auth 查询用户。
  3. 组装 AuthMeResponse

7. 测试策略

至少覆盖:

  1. 已登录用户可通过 /api/auth/me 取回当前用户。
  2. 当短信/微信开关开启时,availableLoginMethods 返回对应值。
  3. JWT 有效但用户不存在时返回 401

8. 后续衔接

这条任务完成后,下一步顺序固定为:

  1. refresh token 轮换
  2. 会话吊销
  3. 手机验证码登录

微信登录继续按“暂缓执行”处理。