Files
kefu/deploy/desktop-auth-fix/README.md
T
2026-09-21 10:34:06 +08:00

53 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 桌面登录 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 认证测试脚本通过。
额外覆盖了记住密码、会话续期、强制下线及患者权限拒绝;尚未使用真实账号在线登录验证。