This commit is contained in:
eric
2026-03-12 04:25:12 -05:00
parent 528044db7d
commit 39a8358af1
7 changed files with 190 additions and 12 deletions

View File

@@ -0,0 +1,98 @@
# 登录态共享与 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 或内部 API 写入/更新 `site_vip`
3. 字段user_id、site_id、order_id、expires_at可选
### 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