[P1 Hotfix] 修复登录故障 - password_hasher导入错误 #180

Merged
xiaoxia merged 1 commits from hotfix/fix-login-p1-import-error into develop 2026-07-03 09:42:48 +08:00
Owner

问题描述

生产环境所有用户无法登录,返回401 "邮箱或密码错误"。注册功能正常。

根因分析

login_use_case.py 第14行错误地导入了模块而非实例:

# 错误(当前代码)
from packages.application.auth import password_hasher

# 正确(修复后)
from packages.application.auth.password_hasher import password_hasher

这导致调用 password_hasher.verify_password() 时抛出:

AttributeError: module 'packages.application.auth.password_hasher' has no attribute 'verify_password'

异常被 except Exception 捕获后返回 "Login failed: ...",最终在路由层被转换为通用的 "邮箱或密码错误" 错误。

修复内容

修改导入语句,导入正确的 PasswordHasher 实例而非模块。

验证

  • 本地测试:修复后密码验证正常工作
  • 生产环境诊断:确认 find_by_emailverify_password 直接调用均正常
  • 影响范围:仅修改1个文件的1行代码

紧急程度

P1 紧急 - 登录功能完全不可用,影响所有用户

修复后需要立即部署到生产环境。

## 问题描述 生产环境所有用户无法登录,返回401 "邮箱或密码错误"。注册功能正常。 ## 根因分析 `login_use_case.py` 第14行错误地导入了模块而非实例: ```python # 错误(当前代码) from packages.application.auth import password_hasher # 正确(修复后) from packages.application.auth.password_hasher import password_hasher ``` 这导致调用 `password_hasher.verify_password()` 时抛出: ``` AttributeError: module 'packages.application.auth.password_hasher' has no attribute 'verify_password' ``` 异常被 `except Exception` 捕获后返回 `"Login failed: ..."`,最终在路由层被转换为通用的 "邮箱或密码错误" 错误。 ## 修复内容 修改导入语句,导入正确的 `PasswordHasher` 实例而非模块。 ## 验证 - ✅ 本地测试:修复后密码验证正常工作 - ✅ 生产环境诊断:确认 `find_by_email` 和 `verify_password` 直接调用均正常 - ✅ 影响范围:仅修改1个文件的1行代码 ## 紧急程度 **P1 紧急** - 登录功能完全不可用,影响所有用户 修复后需要立即部署到生产环境。
xiaoxia added 1 commit 2026-07-03 08:34:31 +08:00
fix: 修复登录P1故障 - password_hasher导入错误
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 148h13m38s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 148h13m43s
CI/CD Pipeline / Frontend Lint (push) Failing after 148h14m13s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 148h14m20s
ed3ab22b88
根因:login_use_case.py 第14行错误地导入了模块而非实例
- 错误: from packages.application.auth import password_hasher
- 正确: from packages.application.auth.password_hasher import password_hasher

这导致调用 password_hasher.verify_password() 时抛出 AttributeError:
module 'packages.application.auth.password_hasher' has no attribute 'verify_password'

异常被 except Exception 捕获后返回 'Login failed: ...',最终显示为
'邮箱或密码错误',所有用户均无法登录。

修复后导入正确的 PasswordHasher 实例,登录功能恢复正常。

P1 紧急修复
Author
Owner

代码审计通过 — 可立即合并

审计范围:1 个文件,1 行 import 修改

根因验证

password_hasher.py L164 定义了实例 password_hasher = PasswordHasher(rounds=12)

原代码 from packages.application.auth import password_hasher 导入的是模块__init__.py 导入了 password_hasher 实例,但 from package import name 优先匹配子模块名),导致调用 password_hasher.verify_password() 时抛出 AttributeError,被 except Exception 捕获后统一返回"邮箱或密码错误"。

修复后 from packages.application.auth.password_hasher import password_hasher 直接导入实例,正确。

结论

0 P0 / 0 P1 / 0 P2,修改精准,根因定位准确,建议立即合并到 develop 并部署到生产环境恢复登录功能。

## ✅ 代码审计通过 — 可立即合并 **审计范围**:1 个文件,1 行 import 修改 ### 根因验证 `password_hasher.py` L164 定义了实例 `password_hasher = PasswordHasher(rounds=12)`。 原代码 `from packages.application.auth import password_hasher` 导入的是**模块**(`__init__.py` 导入了 `password_hasher` 实例,但 `from package import name` 优先匹配子模块名),导致调用 `password_hasher.verify_password()` 时抛出 `AttributeError`,被 `except Exception` 捕获后统一返回"邮箱或密码错误"。 修复后 `from packages.application.auth.password_hasher import password_hasher` 直接导入**实例**,正确。 ### 结论 0 P0 / 0 P1 / 0 P2,修改精准,根因定位准确,建议立即合并到 develop 并部署到生产环境恢复登录功能。
xiaoxia merged commit dfb41452cb into develop 2026-07-03 09:42:48 +08:00
Sign in to join this conversation.