| 1234567891011121314151617181920212223242526272829303132333435 |
- from fastapi import FastAPI, Request
- from core.cache import cache
- from core.constant import CacheNameConstant
- from core.current_user import CurrentUserProvider
- from utils import JwtUtil, logger
- def add_auth_middleware(app: FastAPI):
- """
- 添加认证中间件
- 优化用户上下文管理,减少全局状态依赖
- """
- @app.middleware("http")
- async def middleware(request: Request, call_next):
- token = JwtUtil.get_token_from_request(request)
- try:
- if token:
- payload = JwtUtil.verify_token(token)
- user_id = payload["user_id"]
- token_cache = await cache.get(
- CacheNameConstant.AUTHORIZATION_TOKEN, user_id
- )
- if token_cache and token_cache == token:
- request.state.user_id = user_id
- await CurrentUserProvider.set_current_user(user_id)
- else:
- logger.error(f"token缓存不一致")
- except Exception as e:
- logger.error(f"认证失败,{str(e)}")
- response = await call_next(request)
- return response
|