From a0090f039d10aacef1630d0302c7495ef8f9c678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?API=E6=96=87=E6=A1=A3=E7=BB=B4=E6=8A=A4Agent?= Date: Sun, 28 Jun 2026 10:10:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20login=5Fuse=5Fcase.?= =?UTF-8?q?py=20=E7=9A=84=20jwt=5Fservice=20=E5=AF=BC=E5=85=A5=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:from packages.application.auth import jwt_service 导入的是 jwt_service 模块对象,而非 _JWTServiceProxy 实例。 导致 jwt_service.config.SECRET_KEY 触发 AttributeError, 被 except 吞掉后返回 401,登录完全不可用。 修复: 1. 改为 from packages.application.auth.jwt_service import jwt_service 导入模块底部的 proxy 实例 2. RefreshTokenUseCase.__init__ 同步修复,移除冗余的本地重导入 Co-Authored-By: Claude Fable 5 --- packages/application/auth/login_use_case.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/application/auth/login_use_case.py b/packages/application/auth/login_use_case.py index a56f6641f..fec87e793 100755 --- a/packages/application/auth/login_use_case.py +++ b/packages/application/auth/login_use_case.py @@ -11,7 +11,8 @@ import jwt as pyjwt from packages.adapters.redis import get_session_store from packages.adapters.redis.session_store import SessionStore -from packages.application.auth import jwt_service, password_hasher +from packages.application.auth import password_hasher +from packages.application.auth.jwt_service import jwt_service LEGACY_SHA256_HEX_LENGTH = 64 @@ -169,10 +170,9 @@ class RefreshTokenUseCase: def __init__(self, user_repository, session_store: Optional[SessionStore] = None): self.user_repository = user_repository self.session_store = session_store or get_session_store() - # Import jwt_service for token creation - from packages.application.auth import jwt_service as jwt_svc_module - self.jwt_service = jwt_svc_module - self._jwt_secret_key = jwt_svc_module.config.SECRET_KEY + # jwt_service proxy already imported at module level (line 15) + self.jwt_service = jwt_service + self._jwt_secret_key = jwt_service.config.SECRET_KEY def execute(self, request: RefreshTokenRequest) -> tuple[Optional[LoginResponse], Optional[str]]: """ -- 2.54.0