Skip to content

管理员代登录可靠性修复

背景

管理员代登录已使用一次性登录码与跨窗口消息传递,但管理端在接口响应后才打开窗口,可能被浏览器拦截;同时 E2E mock 仍使用已废弃的 URL code 契约。

本次仅修复管理端弹窗时序、错误提示和对应自动化验证,不调整权限、登录码、令牌或后端接口。

范围与验收

  • [x] 点击代登录时先创建空白窗口,窗口被拦截则不签发登录码。
  • [x] 获得后端 target_url 后才导航窗口,并继续通过校验来源的 postMessage 传递登录码。
  • [x] 管理端 E2E 使用 target_url 契约,覆盖窗口导航和登录码不在 URL 中。
  • [x] 管理端构建与受影响 E2E 通过;文档校验仅剩既有无关问题。
  • [x] 已校正本地三端 URL 配置,使代登录目标指向运行中的用户控制台 5173 端口。

实施步骤

  1. 调整管理端用户详情页的窗口创建、失败清理和中文提示。
  2. 更新用户详情 E2E mock 与跨窗口消息断言。
  3. 运行最小回归、管理端构建和文档校验。
  4. 根据本地复测的 404 现象,校正后端本地三端 URL 配置并清除配置缓存。

风险与回滚

  • 弹窗必须保留 window.opener 才能完成安全握手,不能使用 noopener
  • 若客户端窗口未能初始化,保持超时失败并关闭空白窗口;回滚仅需恢复本次前端与测试改动,不涉及数据或后端配置。

进度

  • [x] 已完成代码与测试边界核对。
  • [x] 已完成管理端弹窗时序、地址校验与错误提示修复。
  • [x] 已完成 E2E、生产构建与文档校验。
  • [x] 已完成本地客户端控制台地址校正与 HTTP 可达性复核。

决策日志

日期决策原因
2026-08-01在用户点击时立即打开 about:blank,收到合法 target_url 后再导航。保留浏览器用户手势并避免把登录码暴露在 URL。
2026-08-01弹窗被拦截时不调用发码接口,并关闭后续失败流程中的空白窗口。避免生成无法交付的一次性登录码。
2026-08-01E2E mock 改为 target_url,以跨窗口事件验证登录码交接。防止旧 URL code 契约回归。
2026-08-01将本地 CLIENT_CONSOLE_URL 改为用户控制台实际端口 5173,并同步校正官网、管理端地址。原配置将客户端地址错指向管理端 5174,导致 /client/login-as 404。

基于 AGPL-3.0-or-later 发布