# 登录态共享与 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_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 保持一致。 --- ## 五、检查清单 - [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)