feat: 使用redis来缓存用户信息
This commit is contained in:
@@ -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开头的接口需要额外验证秘钥
|
||||
|
||||
Reference in New Issue
Block a user