forked from wangziqi/gongxue-base
feat: add web oauth login adapters
This commit is contained in:
@@ -20,7 +20,8 @@ Supabase Auth 可继续作为最终 JWT 用户体系目标;本地重构期先
|
||||
- `GET /api/auth/me`:通过 Bearer token 获取当前用户。
|
||||
- `POST /api/auth/logout`:吊销迁移期 session。
|
||||
- `POST /api/auth/oauth/wechat-miniapp`:微信小程序 `code2Session` 登录,后端换取 openid/unionid,签发 `tk_` session。
|
||||
- `POST /api/auth/oauth/wechat`、`/qq`:provider 占位,已固定 `PROVIDER_NOT_CONFIGURED` / `PROVIDER_NOT_IMPLEMENTED`。
|
||||
- `POST /api/auth/oauth/wechat`:微信网页登录,后端用 code 换 access_token/openid,再拉取 userinfo,按 unionid 合并微信身份并签发 `tk_` session。
|
||||
- `POST /api/auth/oauth/qq`:QQ 登录,后端完成 code 换 token、token 换 openid、拉取 userinfo,并签发 `tk_` session。
|
||||
- `tenant_auth_providers`:租户级公开认证配置。
|
||||
- `sms_verification_codes`:验证码审计表,不保存明文 code。
|
||||
- `auth_login_events`:登录事件审计。
|
||||
@@ -125,7 +126,65 @@ Supabase Auth 可继续作为最终 JWT 用户体系目标;本地重构期先
|
||||
}
|
||||
```
|
||||
|
||||
微信网页 OAuth 和 QQ OAuth 也必须在后端完成 code 换 token、获取 openid/unionid、验错、账号合并和登录事件审计。旧 PocketBase hooks 中的邀请码/销售归属逻辑后续应拆到 `referral` feature,不继续堆在 auth 模块里。
|
||||
微信网页登录和 QQ 登录已按同样原则落地:前端只提交授权 code,后端完成 code 换 token、获取 openid/unionid、验错、账号合并和登录事件审计。响应不会返回 `access_token`、`refresh_token`、`session_key` 或租户密钥。旧 PocketBase hooks 中的邀请码/销售归属逻辑后续应拆到 `referral` feature,不继续堆在 auth 模块里。
|
||||
|
||||
微信网页登录配置示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"provider": "wechat-web",
|
||||
"displayName": "微信网页登录",
|
||||
"status": "active",
|
||||
"configPublic": {
|
||||
"appId": "wx...",
|
||||
"endpoint": "https://api.weixin.qq.com/sns/oauth2/access_token",
|
||||
"userInfoEndpoint": "https://api.weixin.qq.com/sns/userinfo"
|
||||
},
|
||||
"secret": {
|
||||
"secretScope": "oauth",
|
||||
"secretKey": "wechat-web",
|
||||
"secretValue": "网站应用 AppSecret"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
QQ 登录配置示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"provider": "qq-oauth",
|
||||
"displayName": "QQ登录",
|
||||
"status": "active",
|
||||
"configPublic": {
|
||||
"appId": "101xxxx",
|
||||
"redirectUri": "https://h5.example.com/auth/qq/callback",
|
||||
"endpoint": "https://graph.qq.com/oauth2.0/token",
|
||||
"openIdEndpoint": "https://graph.qq.com/oauth2.0/me",
|
||||
"userInfoEndpoint": "https://graph.qq.com/user/get_user_info"
|
||||
},
|
||||
"secret": {
|
||||
"secretScope": "oauth",
|
||||
"secretKey": "qq-oauth",
|
||||
"secretValue": "QQ互联 AppKey"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
前端调用:
|
||||
|
||||
```text
|
||||
POST /api/auth/oauth/wechat
|
||||
body: { "code": "<wechat oauth code>", "lang": "zh_CN" }
|
||||
|
||||
POST /api/auth/oauth/qq
|
||||
body: { "code": "<qq oauth code>", "redirectUri": "https://h5.example.com/auth/qq/callback" }
|
||||
```
|
||||
|
||||
生产注意:
|
||||
|
||||
- `endpoint`、`userInfoEndpoint`、`openIdEndpoint` 默认使用官方 HTTPS 域名;生产环境不允许本地 HTTP fake endpoint。
|
||||
- `appSecret/clientSecret/AppKey` 必须存入 `app_private.tenant_secrets(secret_scope='oauth')`,不能进入 `configPublic`。
|
||||
- QQ 的 `redirectUri` 必须与 QQ 互联后台登记的一致;多租户自定义域名上线前需要逐个配置或设计统一授权中转域名。
|
||||
|
||||
## 手机号绑定/换绑
|
||||
|
||||
@@ -247,6 +306,7 @@ B 端合作商年费、服务费、服务器资源费不走学生端 `orders`,
|
||||
- 阿里云短信 SendSms: https://help.aliyun.com/zh/sms/developer-reference/api-dysmsapi-2017-05-25-sendsms
|
||||
- 腾讯云短信 SendSms: https://cloud.tencent.com/document/api/382/55981
|
||||
- 微信小程序登录 code2Session: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html
|
||||
- 微信开放平台网站应用微信登录: https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
|
||||
- QQ 互联 OAuth: https://wiki.connect.qq.com/oauth2-0简介
|
||||
- 微信支付 API v3: https://pay.weixin.qq.com/doc/v3/merchant/4012791855
|
||||
- 支付宝开放平台: https://opendocs.alipay.com/
|
||||
|
||||
Reference in New Issue
Block a user