3.5 KiB
3.5 KiB
登录态共享与 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 需:
- 从订单中读取
user_id、site_id - 写入 PocketBase
payments表(user_id、type、order_id 等) - 写入 PocketBase
site_vip表(user_id、site_id、order_id、expires_at) - 创建 Memos 账号(qun.hackrobot.cn,账号名=user_id,密码 12345678)
详见 docs/PAYJSAPI_NOMADVIP_SPEC.md。
3.3 PocketBase site_vip 表
- user_id:PocketBase 用户 ID
- site_id:digital | meetup | vip
- order_id:支付订单号
- expires_at:到期时间,null 表示永久
四、cnomadcna 与 VIP 站关系
当前 cnomadcna(meetup)不支持 VIP 站解锁,仅校验 site_id = "meetup"。
若需「VIP 站付费可解锁 meetup」,需在 cnomadcna 的 vip/check 中增加对 site_id = "vip" 的校验,与 digital 保持一致。
五、检查清单
- nomadvip 支付传递 site_id
- digital/cnomadcna sync-session 使用 credentials
- digital/cnomadcna auth/me 使用 credentials
- payjsapi 确认 nomadvip 订单接收并处理 site_id
- payjsapi 确认支付回调写入 site_vip
- payjsapi 确认支付回调写入 payments 表
- payjsapi 确认支付回调创建 Memos 账号(user_id 格式,密码 12345678)