test(BIZ-129): pytest 端到端 19/19 全绿 + 修 reset-confirm bug

测试覆盖:
- login: 成功 / 错密码 / 缺失字段 / 未知用户 (4)
- me: 未登录 / 已登录 / fake cookie → session_expired (3)
- logout: 清 session (1)
- change-password: 成功(强制重新登录)/ 旧密码错 / 密码过短 (3)
- reset-request: 已存在用户 / 未知用户(防枚举)/ 完整重置流程 / 无效 token (4)
- 限流: login 6/min 触发 429 + reset-request 4/min 触发 429 (2)
- 安全约束: session 存 sha256 hash + bcrypt $2b$12$ (2)

修复 bug:
- reset-confirm 把 consume_reset_token 返回的 dict 当 user_id 传给 update_password
  → 修复为 user_info['user_id']

测试结果:19 passed, 65 warnings in 18.34s

依赖:b002e92(7 路由)+ 44f46a0(限流)+ 1df6e7f(前端)

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
costcodev
2026-09-05 07:22:31 +08:00
parent 1df6e7fa83
commit 111b56f2ee
2 changed files with 353 additions and 3 deletions
+5 -3
View File
@@ -390,8 +390,8 @@ def reset_confirm():
if len(new_pw) < 8:
return _err('新密码至少 8 位', 'weak_password', 400)
user_id = consume_reset_token(token)
if not user_id:
user_info = consume_reset_token(token)
if not user_info:
write_op_log(
'reset_confirm_fail', user_id=None, username=None,
ip=_client_ip(), user_agent=_user_agent(),
@@ -399,12 +399,14 @@ def reset_confirm():
)
return _err('token 无效或已过期', 'invalid_token', 400)
user_id = user_info['user_id']
username = user_info.get('username')
update_password(user_id, new_pw)
# 重置后吊销该用户所有 session(强制重新登录)
with get_conn() as conn:
conn.execute("DELETE FROM sessions WHERE user_id = ?", (user_id,))
write_op_log(
'reset_confirm', user_id=user_id, username=None,
'reset_confirm', user_id=user_id, username=username,
ip=_client_ip(), user_agent=_user_agent(), success=True,
)
return _ok({'reset': True})