mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-21 20:55:14 +00:00
refactor(auth): 重构会话存储逻辑,使用Redis存储完整会话数据
将原JWT载荷中内嵌的用户会话信息迁移至Redis存储,JWT仅保留会话ID,减少令牌体积并提升安全性。同步修改在线用户管理、认证依赖、租户中间件等模块适配新逻辑,新增用户会话Redis键配置,完善会话过期处理与强制下线逻辑。
This commit is contained in:
@@ -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("清除所有在线用户会话成功")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user