# 桌面登录 IP 变化修复 2026-09-09 匿名检查结果:客服后台 `/api/v2/desktop/auth/config` 指向 `https://admin.zhenyangtang.com.cn`;该账号服务的 `/adminapi/desktop/session` 返回 HTTP 404。 桌面先直接向账号服务登录,客服后台再验证令牌。专用路由缺失时回退到 `/adminapi/auth.admin/mySelf`,ZYT 的 `AuthMiddleware` 将客服服务器 IP 与桌面登录 IP 比较,返回截图中的错误。重新输入密码不能解决路由缺失。 ## 本地修复内容 - ZYT 专用接口验证桌面终端 7、有效身份及未禁用账号,一次返回当前角色与权限。 - 客服后台成功调用专用接口后不再调用网页 `mySelf`。旧版专用接口缺权限时, 保留未知权限状态,受权限控制的患者功能继续关闭。 - 仅专用接口 HTTP 404/405 允许旧服务兼容;认证失败、错误终端、异常响应均不降级。 - 旧服务的 IP 错误明确提示管理员补部署专用接口。 ## 部署顺序 本修复包未发布到线上,不能仅重启桌面软件来生效。 1. 备份线上待修改文件。把 `zyt/server/app/adminapi/controller/DesktopController.php` 部署到实际提供 `admin.zhenyangtang.com.cn` API 的项目对应目录。 2. 核对同一线上版本已经支持桌面终端。以下在 `C:/zyt` 本地代码中已存在: - `server/app/common/enum/AdminTerminalEnum.php`:`const WECOM_RPA = 7;` - `server/app/adminapi/validate/LoginValidate.php`:`terminal` 的允许列表包含 `AdminTerminalEnum::WECOM_RPA`。 - `server/app/common/cache/AdminTokenCache.php`:缓存身份包含 `'terminal' => $adminSession->terminal`。 若线上缺少这些项,合并对应项;保留线上其余业务代码。无须关闭网页 IP 校验, 无须设置免密登录,也无须把用户密码转交客服后台。 3. 让提供该域名的 PHP 服务加载新代码(若使用 OPcache,按现有发布流程刷新)。 匿名 GET `https://admin.zhenyangtang.com.cn/adminapi/desktop/session` 应返回 JSON 登录失效响应(通常 `code=0`),不应为 404,更不应返回有效身份。 4. 把 `kefu/wechat_rpa/zyt_auth.py` 更新到实际运行客服 API 的同名模块位置, 按现有部署方式重启客服 API。当前项目的 Docker 部署说明位于 `deploy/im-admin/README.md`。 5. 在桌面软件重新输入账号和密码,重新获取 terminal=7 的会话。 核对普通账号能登录、权限正常、禁用账号和错误密码仍被拒绝。 包中不含账号、密码、数据库和环境配置。需要线上服务器部署入口才能完成上线验证。 ## 回归验证 Python:`test_zyt_auth`、`test_backend.ZytAdminTokenVerificationTest`、 `test_login_routing`、`test_desktop_login`。 PHP:`server/tests/AdminDesktopAuthContractTest.php`、 `server/tests/AdminDesktopSessionBehaviorTest.php`。 行为测试使用内存身份,不访问真实账号数据库。 验证结果:52 项 Python 回归测试通过,2 个 PHP 认证测试脚本通过。 额外覆盖了记住密码、会话续期、强制下线及患者权限拒绝;尚未使用真实账号在线登录验证。