修复报错
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# 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.tsx`
|
||||
- `npm run check:encoding`
|
||||
|
||||
新增覆盖:
|
||||
|
||||
- 本地 token 连接卡住时,会自动回退到匿名账号
|
||||
- 匿名回退成功后,页面会显示“登录已过期”提示
|
||||
|
||||
## 备注
|
||||
|
||||
- `npm run typecheck` 当前仓库仍存在其他模块的存量报错,本次热修没有继续扩散处理
|
||||
- 本次已消除本热修涉及文件新增的类型问题,剩余报错集中在 `storageService`、`CustomWorld*` 与 `runtimeStoryService.test.ts`
|
||||
Reference in New Issue
Block a user