From 9fd38f3c8ef7720cfa4328259b1571b8a8db33d0 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 2 Oct 2026 16:31:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(auth):=20VerifyPassword=20=E5=BD=A2?= =?UTF-8?q?=E5=8F=82=E9=81=AE=E8=94=BD=20Password=20=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=20AttributeError?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AdminUserManager.VerifyPassword 的形参名为 Password,遮蔽了模块级导入的 Password 模型 - 导致 Password.objects 变成对 str 取属性:AttributeError: 'str' object has no attribute 'objects' - 影响面:/API/Ehrm/UnlockIdCard、/API/SiteUserManagement/VerifyPassword、2FA 设置/禁用(均走 AuthManager.VerifyUserPassword) - 修法:形参改名 PlainPassword,模型 Password 恢复可见 --- auth/managers.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/auth/managers.py b/auth/managers.py index 2c0a126..3feeca8 100644 --- a/auth/managers.py +++ b/auth/managers.py @@ -2541,9 +2541,12 @@ class AdminUserManager: return True, '密码重置成功' @staticmethod - def VerifyPassword(UserUUID, Password): + def VerifyPassword(UserUUID, PlainPassword): """校验用户密码(独立 Password 表) + 注意:形参**不能**叫 `Password` —— 会遮蔽模块级导入的 `Password` 模型 + (`Password.objects` 会变成对 str 取属性,抛 AttributeError)。 + Returns: (用户记录存在?, 密码是否匹配) """ @@ -2551,7 +2554,7 @@ class AdminUserManager: if pw_obj is None: return False, False try: - return True, VerifyPassword(Password, pw_obj.Password) + return True, VerifyPassword(PlainPassword, pw_obj.Password) except (ValueError, TypeError): return True, False