feat: add china auth providers

This commit is contained in:
Codex
2026-06-28 22:19:46 +08:00
parent 523b63c53b
commit dee82e670f
11 changed files with 1011 additions and 26 deletions

View File

@@ -129,7 +129,7 @@ tenant:<tenantId>:theme
| 页面 | 主要接口 |
| --- | --- |
| 启动页 | `GET /api/tenant/resolve` |
| 登录页 | `POST /api/auth/sms/send``POST /api/auth/sms/verify`、后续微信/QQ provider |
| 登录页 | `POST /api/auth/sms/send``POST /api/auth/sms/verify``POST /api/auth/oauth/wechat-miniapp`后续微信网页/QQ provider |
| 首页 | `/api/catalog/content-entries``/api/catalog/banners``/api/catalog/announcements``/api/profile/me` |
| 选地区 | `/api/catalog/regions``/api/commerce/entitlements/check` |
| 题库入口 | `/api/catalog/content-entries` |
@@ -182,6 +182,69 @@ content_entries
- 管理后台菜单按 `GET /api/tenant-admin/permissions` 和用户权限渲染。
- H5 自定义域名下要注意缓存隔离,不能把 A 租户主题缓存用到 B 租户。
## 登录对接
### 短信登录
开发环境可以先使用 mock 短信,接口会返回 `debugCode`。生产环境禁止依赖 `debugCode`
```text
POST /api/auth/sms/send
body: { "phone": "13800000000", "purpose": "login" }
POST /api/auth/sms/verify
body: { "phone": "13800000000", "code": "123456", "purpose": "login" }
```
成功后保存:
```text
session.token
session.expiresAt
user
```
后续请求统一带:
```text
Authorization: Bearer <session.token>
x-tenant-id: <tenantId>
```
### 微信小程序登录
微信小程序端调用 `Taro.login()` 获取 code然后交给后端
```text
POST /api/auth/oauth/wechat-miniapp
body: {
"code": "<wx.login code>",
"profile": {
"nickName": "...",
"avatarUrl": "..."
}
}
```
成功响应包含:
```text
provider
user
isNewUser
session.token
session.expiresAt
identity.openId
identity.unionId
```
注意:
- 前端不接触 `appSecret`
- 前端不会拿到微信 `session_key`
- 如果登录前已经解析到推广码,登录成功后再调用 `/api/referral/bind` 完成首绑保护。
- 手机号授权后续应走独立的“绑定手机号”接口,不要把微信手机号解密逻辑写在页面里。
## 第一阶段页面建议
1. `pages/bootstrap/index`