处理中间件异常问题

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 json
import re import re
import time import time
from datetime import datetime, timezone from datetime import datetime
from typing import Any, Dict from typing import Any, Dict
import jwt import jwt
@@ -82,7 +82,7 @@ class JwtAuthMiddleware(BaseHTTPMiddleware):
if redis_client is None: if redis_client is None:
return return
redis_key = f"login:token:{user_id}" redis_key = f"client:login:token:{user_id}"
raw = await redis_client.get(redis_key) raw = await redis_client.get(redis_key)
if not raw: if not raw:
return return
@@ -90,30 +90,11 @@ class JwtAuthMiddleware(BaseHTTPMiddleware):
info = json.loads(raw) if isinstance(raw, str) else raw info = json.loads(raw) if isinstance(raw, str) else raw
devices = info.get("loginDevices", []) devices = info.get("loginDevices", [])
# 过滤过期设备 # 校验当前设备是否在列表中
now = datetime.now(timezone.utc) device_uuids = {d["uuId"] for d in devices}
valid_devices = [] if uu_id not in device_uuids:
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:
return 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)) RequestContext.user_id.set(int(user_id))