feat: add wechat miniprogram webview login
This commit is contained in:
@@ -92,6 +92,25 @@
|
||||
2. 若是并入已有手机号正式账号,则返回目标正式账号快照,当前实现会保持其账号主登录方式,例如 `loginMethod = phone`。
|
||||
3. 但 access token 中的 `provider` 仍按**本次登录来源**签发,不依赖账号主登录方式推断,因此微信绑定后的当前会话仍会签发 `provider = wechat`。
|
||||
|
||||
### 3.4 `POST /api/auth/wechat/miniprogram-login`
|
||||
|
||||
职责固定为:
|
||||
|
||||
1. 接收微信小程序原生壳通过 `wx.login` 拿到的 `code`。
|
||||
2. 在 `Axum` 内调用微信 `jscode2session`,兑换 `openid/unionid`。
|
||||
3. 复用 `resolve_login` 处理 `unionid/openid -> user_id` 的查找、补写和待绑定账号创建。
|
||||
4. 签发本系统 access token,并创建 refresh session。
|
||||
5. 返回:
|
||||
- `token`
|
||||
- `bindingStatus`
|
||||
- `user`
|
||||
|
||||
关键约束:
|
||||
|
||||
1. 小程序壳不能把裸 `openid` 直接拼给 H5 做登录。
|
||||
2. H5 仍只消费本系统 `auth_token`,小程序壳只是把这枚 token 放入既有 hash 回调格式。
|
||||
3. 小程序请求必须补传 `x-client-type=mini_program` 与 `x-client-runtime=wechat_mini_program`,用于 refresh session 记录来源。
|
||||
|
||||
## 4. 当前最小实现策略
|
||||
|
||||
当前阶段为了先打通 Rust 后端闭环,采用以下最小实现:
|
||||
@@ -125,6 +144,7 @@
|
||||
4. `GET /api/auth/wechat/start`
|
||||
5. `GET /api/auth/wechat/callback`
|
||||
6. `POST /api/auth/wechat/bind-phone`
|
||||
7. `POST /api/auth/wechat/miniprogram-login`
|
||||
|
||||
## 6. 环境变量
|
||||
|
||||
@@ -139,11 +159,14 @@
|
||||
7. `WECHAT_AUTHORIZE_ENDPOINT`
|
||||
8. `WECHAT_ACCESS_TOKEN_ENDPOINT`
|
||||
9. `WECHAT_USER_INFO_ENDPOINT`
|
||||
10. `WECHAT_STATE_TTL_MINUTES`
|
||||
11. `WECHAT_MOCK_USER_ID`
|
||||
12. `WECHAT_MOCK_UNION_ID`
|
||||
13. `WECHAT_MOCK_DISPLAY_NAME`
|
||||
14. `WECHAT_MOCK_AVATAR_URL`
|
||||
10. `WECHAT_JS_CODE_SESSION_ENDPOINT`
|
||||
11. `WECHAT_MINI_PROGRAM_APP_ID`
|
||||
12. `WECHAT_MINI_PROGRAM_APP_SECRET`
|
||||
13. `WECHAT_STATE_TTL_MINUTES`
|
||||
14. `WECHAT_MOCK_USER_ID`
|
||||
15. `WECHAT_MOCK_UNION_ID`
|
||||
16. `WECHAT_MOCK_DISPLAY_NAME`
|
||||
17. `WECHAT_MOCK_AVATAR_URL`
|
||||
|
||||
## 7. 与后续 SpacetimeDB 的衔接要求
|
||||
|
||||
|
||||
Reference in New Issue
Block a user