处理中间件异常问题

This commit is contained in:
zk
2026-04-02 17:16:53 +08:00
parent b9fa4a257b
commit ec93cad523
+5 -24
View File
@@ -1,7 +1,7 @@
import json
import re
import time
from datetime import datetime, timezone
from datetime import datetime
from typing import Any, Dict
import jwt
@@ -82,7 +82,7 @@ class JwtAuthMiddleware(BaseHTTPMiddleware):
if redis_client is None:
return
redis_key = f"login:token:{user_id}"
redis_key = f"client:login:token:{user_id}"
raw = await redis_client.get(redis_key)
if not raw:
return
@@ -90,30 +90,11 @@ class JwtAuthMiddleware(BaseHTTPMiddleware):
info = json.loads(raw) if isinstance(raw, str) else raw
devices = info.get("loginDevices", [])
# 过滤过期设备
now = datetime.now(timezone.utc)
valid_devices = []
for d in devices:
last_login_str = d["lastLoginTime"]
# 兼容 Java Instant 格式(尾部 Z
if last_login_str.endswith("Z"):
last_login_str = last_login_str[:-1] + "+00:00"
last_login = datetime.fromisoformat(last_login_str)
if last_login.tzinfo is None:
last_login = last_login.replace(tzinfo=timezone.utc)
if (now - last_login).total_seconds() < settings.token_expire_seconds:
valid_devices.append(d)
# 校验当前设备
device_map = {d["uuId"]: d for d in valid_devices}
if uu_id not in device_map:
# 校验当前设备是否在列表中
device_uuids = {d["uuId"] for d in devices}
if uu_id not in device_uuids:
return
# 续期
device_map[uu_id]["lastLoginTime"] = now.isoformat()
info["loginDevices"] = valid_devices
await redis_client.set(redis_key, json.dumps(info), ex=settings.token_expire_seconds)
RequestContext.user_id.set(int(user_id))