From 71479e2ad1750b5f4ae84f22211b2e2bbf64137f Mon Sep 17 00:00:00 2001 From: taiyi Date: Sun, 12 Apr 2026 17:08:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=94=A8=E6=88=B7=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E6=97=B6=E9=97=B4=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/utils/security.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/utils/security.py b/backend/utils/security.py index d55003c..0184c00 100644 --- a/backend/utils/security.py +++ b/backend/utils/security.py @@ -21,12 +21,21 @@ logger = logging.getLogger(__name__) security = HTTPBearer() def create_access_token(data: dict, expires_delta: timedelta = None): - """创建访问令牌""" + """创建访问令牌 + + 业务要求:普通登录至少 7 天内不掉线。 + 因此在未显式传入 expires_delta 时,强制最小有效期为 7 天。 + """ to_encode = data.copy() + if expires_delta: expire = datetime.utcnow() + expires_delta else: - expire = datetime.utcnow() + timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) + min_expire_minutes = 60 * 24 * 7 # 7 days + configured_expire_minutes = int(getattr(settings, "ACCESS_TOKEN_EXPIRE_MINUTES", min_expire_minutes) or min_expire_minutes) + effective_expire_minutes = max(configured_expire_minutes, min_expire_minutes) + expire = datetime.utcnow() + timedelta(minutes=effective_expire_minutes) + to_encode.update({"exp": expire}) encoded_jwt = jwt.encode(to_encode, settings.JWT_SECRET_KEY, algorithm=settings.JWT_ALGORITHM) return encoded_jwt