refactor(auth): 重构会话存储逻辑,使用Redis存储完整会话数据

将原JWT载荷中内嵌的用户会话信息迁移至Redis存储,JWT仅保留会话ID,减少令牌体积并提升安全性。同步修改在线用户管理、认证依赖、租户中间件等模块适配新逻辑,新增用户会话Redis键配置,完善会话过期处理与强制下线逻辑。
This commit is contained in:
zhangtao
2026-06-21 07:20:00 +08:00
parent d6c3104f2d
commit 3169ef2355
6 changed files with 94 additions and 42 deletions
@@ -24,7 +24,15 @@ class OnlineService:
continue
try:
payload = decode_access_token(token=token)
session_info = json.loads(payload.sub)
session_id = payload.sub
# 从 Redis 读取完整会话信息
raw = await RedisCURD(redis).get(
f"{RedisInitKeyConfig.USER_SESSION.key}:{session_id}"
)
if not raw:
continue
session_info = json.loads(raw)
# 内联搜索匹配逻辑
if search:
@@ -53,11 +61,13 @@ class OnlineService:
async def delete_online(redis: Redis, session_id: str) -> None:
await RedisCURD(redis).delete(f"{RedisInitKeyConfig.ACCESS_TOKEN.key}:{session_id}")
await RedisCURD(redis).delete(f"{RedisInitKeyConfig.REFRESH_TOKEN.key}:{session_id}")
await RedisCURD(redis).delete(f"{RedisInitKeyConfig.USER_SESSION.key}:{session_id}")
logger.info(f"强制下线用户会话: {session_id}")
@staticmethod
async def clear_online(redis: Redis) -> None:
await RedisCURD(redis).clear(f"{RedisInitKeyConfig.ACCESS_TOKEN.key}:*")
await RedisCURD(redis).clear(f"{RedisInitKeyConfig.REFRESH_TOKEN.key}:*")
await RedisCURD(redis).clear(f"{RedisInitKeyConfig.USER_SESSION.key}:*")
logger.info("清除所有在线用户会话成功")