管理员代登录可靠性修复
背景
管理员代登录已使用一次性登录码与跨窗口消息传递,但管理端在接口响应后才打开窗口,可能被浏览器拦截;同时 E2E mock 仍使用已废弃的 URL code 契约。
本次仅修复管理端弹窗时序、错误提示和对应自动化验证,不调整权限、登录码、令牌或后端接口。
范围与验收
- [x] 点击代登录时先创建空白窗口,窗口被拦截则不签发登录码。
- [x] 获得后端
target_url后才导航窗口,并继续通过校验来源的postMessage传递登录码。 - [x] 管理端 E2E 使用
target_url契约,覆盖窗口导航和登录码不在 URL 中。 - [x] 管理端构建与受影响 E2E 通过;文档校验仅剩既有无关问题。
- [x] 已校正本地三端 URL 配置,使代登录目标指向运行中的用户控制台
5173端口。
实施步骤
- 调整管理端用户详情页的窗口创建、失败清理和中文提示。
- 更新用户详情 E2E mock 与跨窗口消息断言。
- 运行最小回归、管理端构建和文档校验。
- 根据本地复测的 404 现象,校正后端本地三端 URL 配置并清除配置缓存。
风险与回滚
- 弹窗必须保留
window.opener才能完成安全握手,不能使用noopener。 - 若客户端窗口未能初始化,保持超时失败并关闭空白窗口;回滚仅需恢复本次前端与测试改动,不涉及数据或后端配置。
进度
- [x] 已完成代码与测试边界核对。
- [x] 已完成管理端弹窗时序、地址校验与错误提示修复。
- [x] 已完成 E2E、生产构建与文档校验。
- [x] 已完成本地客户端控制台地址校正与 HTTP 可达性复核。
决策日志
| 日期 | 决策 | 原因 |
|---|---|---|
| 2026-08-01 | 在用户点击时立即打开 about:blank,收到合法 target_url 后再导航。 | 保留浏览器用户手势并避免把登录码暴露在 URL。 |
| 2026-08-01 | 弹窗被拦截时不调用发码接口,并关闭后续失败流程中的空白窗口。 | 避免生成无法交付的一次性登录码。 |
| 2026-08-01 | E2E mock 改为 target_url,以跨窗口事件验证登录码交接。 | 防止旧 URL code 契约回归。 |
| 2026-08-01 | 将本地 CLIENT_CONSOLE_URL 改为用户控制台实际端口 5173,并同步校正官网、管理端地址。 | 原配置将客户端地址错指向管理端 5174,导致 /client/login-as 404。 |
