Page:
T-235
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
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· commitafc651f75a3a
id: T-235 title: 修复顺运宝登录后用户会话校验协议 phase: 2 deps:
- T-234
status: DONE
created: 2026-07-29
context_ref:
4cf2151work_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。
方案
- 登录成功后从
data.user严格解析正整数 ID 和非空 username,仅保存在受锁内存会话中; 不保存或返回登录 token。 - 使用
url.Values构造GET /am/user/get?id=<id>,保持同一 Cookie jar;响应必须包含相同 ID 和 username,否则清除内存认证身份并返回ERP_RESPONSE_INVALID。 - 后续 Validate/货运查询复用已确认身份。HTTP 401/403 或 ERP code
-2才归类为ERP_SESSION_REQUIRED;其他业务status=false归类为ERP_RESPONSE_INVALID,不再误报 会话失效/泛化 503。 - 以脱敏 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 遗漏用户接口的idquery, 并发现非-2响应被过度归类为会话失效。 - 2026-07-29:实现受锁内存 session identity、结构化 user id query、ID/username 一致性校验 和精确 session error 分类;更新 source/Admin 脱敏 fixture,并验证 diagnostics 不输出 query 或用户身份。标准 Go 测试、race、vet 及 api/migrate/authctl 构建均通过。