feat: 使用redis来缓存用户信息

This commit is contained in:
martsforever
2025-09-27 21:06:15 +08:00
parent 97515ecfe7
commit 4311f521a7
3 changed files with 63 additions and 15 deletions
+19 -8
View File
@@ -10,9 +10,11 @@ from starlette.responses import JSONResponse
from app.config.env import env
from app.controller.add_user_route import unauthorized_exception, get_current_user
from app.model.ApiSecretModel import ApiSecretService
from app.model.UserModel import PublicUser
from app.utils.CrpyUtils import TokenInfo, CryptUtils
from app.utils.api_secret_utils import api_secret_utils, ApiSecretStatus
from app.utils.db_utils import async_session
from app.utils.redis_utils import get_redis_cache
def add_app_middlewares(app: FastAPI):
@@ -63,14 +65,23 @@ def add_app_middlewares(app: FastAPI):
except InvalidTokenError:
raise unauthorized_exception
# 根据token信息获取用户信息
async with async_session() as session:
try:
public_user = await get_current_user(session, token)
request.state.user = public_user
request.state.token = token
except InvalidTokenError:
raise unauthorized_exception
async def get_default_cache_value():
async with async_session() as session:
try:
public_user = await get_current_user(session, token)
return public_user.model_dump(mode="json")
except InvalidTokenError:
return None
user_dict = await get_redis_cache(
f"access_token_username_{token_info.get('username')}",
get_default_cache_value
)
if not user_dict:
raise unauthorized_exception
request.state.user = PublicUser(**user_dict)
request.state.token = token
# 如果请求的是api接口
# api开头的接口需要额外验证秘钥