拆分STDB与HTTP会话token存储槽
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
- [SPACETIME_DEV_URI_HOTFIX_2026-04-20.md](./SPACETIME_DEV_URI_HOTFIX_2026-04-20.md):修复开发默认配置把 Spacetime 连接误指向 Vite `3000` 端口的问题。
|
||||
- [SPACETIME_AUTH_TOKEN_FALLBACK_HOTFIX_2026-04-20.md](./SPACETIME_AUTH_TOKEN_FALLBACK_HOTFIX_2026-04-20.md):本地 token 失效时自动降级匿名连接,并提示“登录已过期”的热修记录。
|
||||
- [STDB_AUTH_TAIL_PHASE1_AUTO_GUEST_CREDENTIAL_REMOVAL_2026-04-20.md](./STDB_AUTH_TAIL_PHASE1_AUTO_GUEST_CREDENTIAL_REMOVAL_2026-04-20.md):Auth 尾巴清理第一段,删除前端自动游客用户名/密码残留。
|
||||
- [STDB_AUTH_TAIL_PHASE2_TOKEN_SLOT_SPLIT_2026-04-20.md](./STDB_AUTH_TAIL_PHASE2_TOKEN_SLOT_SPLIT_2026-04-20.md):将 STDB token 与旧 HTTP Bearer token 拆成独立存储槽。
|
||||
- [TASK_AUTO_COMMIT_WORKFLOW_2026-04-20.md](./TASK_AUTO_COMMIT_WORKFLOW_2026-04-20.md):任务完成后按文件边界自动提交的脚本与协作约定。
|
||||
- [NODE_DEV_STARTUP_HOTFIX_2026-04-20.md](./NODE_DEV_STARTUP_HOTFIX_2026-04-20.md):`npm run dev` 启动失败的热修记录、根因与验证结果。
|
||||
- [NODE_SERVER_KNOWLEDGE_GRAPH_2026-04-08.md](./NODE_SERVER_KNOWLEDGE_GRAPH_2026-04-08.md):当前 Node 运行时后端的技术栈、入口、鉴权、存储与接口知识图谱。
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
# STDB Auth 尾巴清理 Phase 2:拆分 STDB Token 与旧 HTTP Bearer 存储槽(2026-04-20)
|
||||
|
||||
## 1. 本轮目标
|
||||
|
||||
在不打断现有 `/api/runtime/story/*` 旧链路的前提下,把两种不同语义的 token 从同一个 localStorage key 中拆开:
|
||||
|
||||
1. Spacetime 连接 token
|
||||
2. 旧 Express Bearer access token
|
||||
|
||||
## 2. 背景问题
|
||||
|
||||
此前前端把这两种 token 混存到同一个 key:
|
||||
|
||||
- `genarrative.auth.access-token.v1`
|
||||
|
||||
这会带来两个直接问题:
|
||||
|
||||
1. `AuthGate` 和 `authService` 无法区分“当前是在恢复 STDB 会话”还是“当前只是旧 HTTP Bearer 还在”
|
||||
2. 后续删除 `/api/auth/refresh` 和 `/api/runtime/story/*` 时,很容易互相打断
|
||||
|
||||
## 3. 本轮落地
|
||||
|
||||
### 3.1 新的存储语义
|
||||
|
||||
- HTTP Bearer:
|
||||
- `genarrative.auth.http-access-token.v1`
|
||||
- Spacetime token:
|
||||
- `genarrative.auth.spacetime-token.v1`
|
||||
|
||||
### 3.2 代码调整
|
||||
|
||||
1. `src/services/apiClient.ts`
|
||||
- 保留旧 HTTP token API:
|
||||
- `getStoredAccessToken`
|
||||
- `setStoredAccessToken`
|
||||
- `clearStoredAccessToken`
|
||||
- 新增 STDB token API:
|
||||
- `getStoredSpacetimeToken`
|
||||
- `setStoredSpacetimeToken`
|
||||
- `clearStoredSpacetimeToken`
|
||||
2. `src/spacetime/client.ts`
|
||||
- Spacetime 连接改为只读写 STDB token key
|
||||
3. `src/services/authService.ts`
|
||||
- 账号恢复链只依据 STDB token 判断是否尝试恢复连接
|
||||
4. `src/components/auth/AuthGate.tsx`
|
||||
- UI 启动时只依据 STDB token 判断是否走会话恢复
|
||||
|
||||
### 3.3 当前保留不变的旧链路
|
||||
|
||||
1. `fetchWithApiAuth()`
|
||||
2. `/api/auth/refresh`
|
||||
3. `/api/runtime/story/*` 的旧 Bearer 注入
|
||||
|
||||
这些内容仍继续只使用 HTTP token key。
|
||||
|
||||
## 4. 当前阶段意义
|
||||
|
||||
这一步不是最终删除旧 JWT,而是先把 STDB 会话和旧 Express 会话拆成两个独立层:
|
||||
|
||||
1. STDB auth 可以继续独立演进
|
||||
2. runtime story 旧链路暂时还能工作
|
||||
3. 后续迁 story 到 STDB 时,可以单独移除 HTTP token 相关逻辑
|
||||
|
||||
## 5. 验证
|
||||
|
||||
已补定向测试覆盖:
|
||||
|
||||
1. `src/services/apiClient.test.ts`
|
||||
- 验证 HTTP token 与 STDB token 独立存储
|
||||
2. `src/services/authService.test.ts`
|
||||
- 验证 STDB token 失效回退匿名连接
|
||||
3. `src/components/auth/AuthGate.test.tsx`
|
||||
- 验证 UI 恢复链改为读取 STDB token
|
||||
Reference in New Issue
Block a user