2.7 KiB
2.7 KiB
创作入口鉴权错误串味修复
日期:2026-04-22
1. 问题现象
平台首页点击“创作”后,用户在创作入口浮层或创作中心起始卡片中会看到:
缺少 Authorization Bearer Token
该文案直接暴露了后端鉴权实现细节,不符合平台入口的产品语义,也会让用户误以为“点击创作弹窗本身就失败了”。
2. 根因拆解
本次问题实际由两层叠加造成:
useRpgCreationSessionController把“恢复旧 Agent 会话失败”的错误写入creationTypeError。PlatformEntryFlowShellImpl又把creationTypeError同时透传给:- 创作中心起始卡片
createError - 创作类型浮窗
error - 平台首页
platformError
- 创作中心起始卡片
结果是:
- 旧会话恢复失败
- 未登录态残留会话恢复
- 本地 access token 丢失但 refresh cookie 仍在
这些与“当前点击新建创作”并不完全等价的错误,被错误地展示到了新建创作入口上。
3. 修复策略
3.1 错误分层
在 useRpgCreationSessionController 中新增:
agentWorkspaceRestoreError
约束:
- 旧 Agent 会话恢复失败只写入
agentWorkspaceRestoreError - 用户主动点击新建创作失败才写入
creationTypeError - 创作中心起始卡片和创作类型浮窗只展示“新建入口错误”
- 平台页和工作区恢复占位文案展示“恢复态错误”
3.2 鉴权兜底
在 fetchWithApiAuth 中补充规则:
- 受保护请求若本地没有 bearer token
- 且请求未声明
skipAuth / skipRefresh - 先尝试
ensureStoredAccessToken()静默补票 - 补票失败再继续原始请求
这样可以覆盖“refresh cookie 仍有效,但本地 access token 丢失”的场景,避免后端直接返回“缺少 Authorization Bearer Token”。
3.3 用户态错误文案收敛
resolveRpgEntryErrorMessage 对 401 UNAUTHORIZED 与 缺少 Authorization Bearer Token 统一映射为:
当前登录状态已失效,请重新登录后继续。
目标是把后端实现细节收束成平台用户可理解的恢复动作。
4. 影响范围
本轮覆盖:
- RPG / Custom World 创作入口
- 平台创作中心起始卡片
- 平台创作类型浮窗
- 统一前端 API 鉴权请求层
本轮不改:
- 后端
401契约 - 登录弹窗交互
- Big Fish / Puzzle 的后端路由鉴权策略
5. 验收
- 点击“创作”后,不再出现原始
Authorization Bearer Token报错文案 - 旧会话恢复失败时,错误只停留在恢复上下文,不污染新建创作入口
- 本地 token 丢失但 refresh 仍有效时,前端可自动补票后继续请求
- 相关测试与编码检查通过