1
T-235
ila edited this page 2026-08-07 16:36:49 +08:00
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.

同步来源:docs/tasks/T-235.md · commit afc651f75a3a


id: T-235 title: 修复顺运宝登录后用户会话校验协议 phase: 2 deps:

  • T-234 status: DONE created: 2026-07-29 context_ref: 4cf2151 work_branch: null write_paths:
  • docs/tasks/T-235.md
  • docs/api.md
  • docs/current-state.md
  • docs/integrations/shunyunbao-contract.md
  • backend-api/internal/platform/shunyunbao/**
  • backend-api/internal/transport/httpapi/admin_handlers_test.go

问题 / 背景

真实诊断日志证明验证码 OCR F4B8 被 ERP 接受,POST /am/auth/login 返回 status=true、user 和 token;随后 Go 请求不带 query 的 GET /am/user/get,ERP 返回 status=false、msg=没有任何操作。原 Python 合约明确要求 GET /am/user/get?id=<登录响应中的 user.id>。当前 Go 只用 hasUser 判断 user 存在,既未 保存/传递 user.id,又把用户接口任意 status=false 都归类为会话失效,最终在 Web 层表现为 泛化 503。

方案

  1. 登录成功后从 data.user 严格解析正整数 ID 和非空 username,仅保存在受锁内存会话中; 不保存或返回登录 token。
  2. 使用 url.Values 构造 GET /am/user/get?id=<id>,保持同一 Cookie jar;响应必须包含相同 ID 和 username,否则清除内存认证身份并返回 ERP_RESPONSE_INVALID。
  3. 后续 Validate/货运查询复用已确认身份。HTTP 401/403 或 ERP code -2 才归类为 ERP_SESSION_REQUIRED;其他业务 status=false 归类为 ERP_RESPONSE_INVALID,不再误报 会话失效/泛化 503。
  4. 以脱敏 fixture 覆盖 user id query、身份一致性、非 -2 错误分类、-2/401 会话失效、 Cookie 复用和查询流程;日志不得输出 user id、username、token 或 query。

验收要点

  • 登录成功后的用户校验请求包含登录响应中的唯一 id,且复用登录 Cookie。
  • 用户响应 ID/username 必须与登录身份一致;缺失、冲突或普通 status=false 返回 ERP_RESPONSE_INVALID。
  • 仅 HTTP 401/403 或 ERP code -2 清除认证并返回 ERP_SESSION_REQUIRED。
  • Admin 不再因缺失 user id 得到 freight_import_failed status=503;该协议失败若重现应显示 ERP_RESPONSE_INVALID。
  • 标准 Go 测试、race、vet 和三个入口构建通过。

边界

  • 不修改 OCR、验证码重试、ERP 账号密码、登录 token 持久化、货运字段、数据库或采购流程。
  • 不在自动测试中访问真实 ERP;真实单号 smoke 由部署者重启后执行。

执行记录

  • 2026-07-29:创建任务。真实日志已排除 OCR、网络和账号密码;对照 D:/chengma/shunyunbaoerp/shunyunbaoerp_single.py 确认 Go 遗漏用户接口的 id query, 并发现非 -2 响应被过度归类为会话失效。
  • 2026-07-29:实现受锁内存 session identity、结构化 user id query、ID/username 一致性校验 和精确 session error 分类;更新 source/Admin 脱敏 fixture,并验证 diagnostics 不输出 query 或用户身份。标准 Go 测试、race、vet 及 api/migrate/authctl 构建均通过。