2.0 KiB
2.0 KiB
Spacetime 账号连接过期回退热修 2026-04-20
背景
当前网页启动时会先尝试复用本地保存的 Spacetime token 建立账号连接。
问题表现:
- 页面长时间停留在“正在建立账号连接...”
- 本地 token 已失效时,前端没有稳定降级到匿名账号
- 用户看不到明确的“登录已过期”提示,只会感觉页面卡住
目标
本次热修只处理登录恢复链路,不扩散到其他运行时模块:
- 本地 token 登录失败或超时后,自动清理失效 token
- 立即改走匿名连接,恢复页面可用性
- 在进入匿名账号后给出一次明确提示:登录已过期,已切换为匿名账号
落地方案
1. 账号恢复层增加 token 失效回退
文件:
src/services/authService.ts
调整点:
getCurrentAuthUser()底层恢复流程增加recoveryNotice- 当浏览器本地存在 token 时,首次建连增加短超时保护
- 若首次建连失败或超时:
- 断开当前 Spacetime 连接
- 清空本地 access token
- 重新以匿名身份建连
- 匿名建连成功后,返回
login_expired恢复结果给 UI
2. 认证门面增加非阻塞提示
文件:
src/components/auth/AuthGate.tsx
调整点:
AuthGate成功恢复到匿名账号后,展示顶部轻量提示条- 文案为“登录已过期,已切换为匿名账号。”
- 提示条会自动收起,也允许用户手动关闭
- 不阻断页面继续进入主内容
验证
已完成:
npx vitest run src/services/authService.test.ts src/components/auth/AuthGate.test.tsxnpm run check:encoding
新增覆盖:
- 本地 token 连接卡住时,会自动回退到匿名账号
- 匿名回退成功后,页面会显示“登录已过期”提示
备注
npm run typecheck当前仓库仍存在其他模块的存量报错,本次热修没有继续扩散处理- 本次已消除本热修涉及文件新增的类型问题,剩余报错集中在
storageService、CustomWorld*与runtimeStoryService.test.ts