Files
gitlab-instance-0a899031_no…/docs/AUTH_VIP_CHECK_REPORT.md
2026-03-13 03:43:50 -05:00

104 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 登录态共享与 VIP 解锁逻辑检查报告
检查范围digital、cnomadcna、nomadvip、payjsapi 后端
---
## 一、登录态共享SSO
### 1.1 Cookie 配置
| 项目 | Cookie 名 | 域名 | 配置来源 |
|------|-----------|------|----------|
| nomadvip | pb_session | AUTH_COOKIE_DOMAIN \|\| .hackrobot.cn | 硬编码 |
| digital | pb_session | AUTH_COOKIE_DOMAIN (domain.config) | .${ROOT_DOMAIN} |
| cnomadcna | pb_session | AUTH_COOKIE_DOMAIN (domain.config) | .${ROOT_DOMAIN} |
**结论**:三项目 Cookie 配置一致,默认均为 `.hackrobot.cn`
### 1.2 Auth API 实现
| 项目 | /api/auth/sync-session | /api/auth/me | /api/auth/logout |
|------|------------------------|--------------|------------------|
| nomadvip | ✅ | ✅ | ✅ |
| digital | ✅ | ✅ | ✅ |
| cnomadcna | ✅ | ✅ | ✅ |
### 1.3 已修复项
- **digital/cnomadcna AuthModal**sync-session 请求添加 `credentials: "include"`
- **digital Header / cnomadcna Navbar**/api/auth/me 添加 `credentials: "include"`
- **nomadvip**:此前已添加 credentials
---
## 二、VIP 解锁逻辑
### 2.1 site_id 与 VIP 校验
| 项目 | SITE_ID | VIP 校验逻辑 |
|------|---------|--------------|
| nomadvip | vip | site_vip.site_id = "vip" |
| digital | digital可配置 | site_id = SITE_ID **或** site_id = "vip"VIP 站可解锁所有 digital |
| cnomadcna | meetup | site_vip.site_id = "meetup"(仅本站) |
### 2.2 支付接口 site_id 传递
| 项目 | 接口路径 | site_id 传递 | 状态 |
|------|----------|--------------|------|
| digital | /digital/payh5 | ✅ site_id: SITE_ID | 正常 |
| cnomadcna | /cnomadcna/payh5 | ✅ site_id: "meetup" | 正常 |
| nomadvip | /nomadvip/payh5 | ✅ site_id: "vip"(已修复) | 已修复 |
**nomadvip 修复**createPayOrder 及 redirect 请求中补充 `site_id: "vip"`,确保 payjsapi 支付回调能正确写入 site_vip。
---
## 三、payjsapi 后端要求
payjsapi 不在本仓库,需在 api.hackrobot.cn 侧确认:
### 3.1 订单创建接口
- **nomadvip**`POST /nomadvip/payh5` 需接收 `site_id: "vip"`
- **digital**`POST /digital/payh5` 需接收 `site_id`
- **cnomadcna**`POST /cnomadcna/payh5` 需接收 `site_id: "meetup"`
### 3.2 支付成功回调
支付成功后payjsapi 需:
1. 从订单中读取 `user_id``site_id`
2. **写入 PocketBase `payments` 表**user_id、type、order_id 等)
3. **写入 PocketBase `site_vip` 表**user_id、site_id、order_id、expires_at
4. **创建 Memos 账号**qun.hackrobot.cn账号名=user_id密码 12345678
详见 `docs/PAYJSAPI_NOMADVIP_SPEC.md`
### 3.3 PocketBase site_vip 表
- user_idPocketBase 用户 ID
- site_iddigital | meetup | vip
- order_id支付订单号
- expires_at到期时间null 表示永久
---
## 四、cnomadcna 与 VIP 站关系
当前 cnomadcnameetup**不**支持 VIP 站解锁,仅校验 `site_id = "meetup"`
若需「VIP 站付费可解锁 meetup」需在 cnomadcna 的 vip/check 中增加对 `site_id = "vip"` 的校验,与 digital 保持一致。
---
## 五、检查清单
- [x] nomadvip 支付传递 site_id
- [x] digital/cnomadcna sync-session 使用 credentials
- [x] digital/cnomadcna auth/me 使用 credentials
- [ ] payjsapi 确认 nomadvip 订单接收并处理 site_id
- [ ] payjsapi 确认支付回调写入 site_vip
- [ ] payjsapi 确认支付回调写入 payments 表
- [ ] payjsapi 确认支付回调创建 Memos 账号user_id 格式,密码 12345678