auth_middleware.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from fastapi import FastAPI, Request
  2. from core.cache import cache
  3. from core.constant import CacheNameConstant
  4. from core.current_user import CurrentUserProvider
  5. from utils import JwtUtil, logger
  6. def add_auth_middleware(app: FastAPI):
  7. """
  8. 添加认证中间件
  9. 优化用户上下文管理,减少全局状态依赖
  10. """
  11. @app.middleware("http")
  12. async def middleware(request: Request, call_next):
  13. token = JwtUtil.get_token_from_request(request)
  14. try:
  15. if token:
  16. payload = JwtUtil.verify_token(token)
  17. user_id = payload["user_id"]
  18. token_cache = await cache.get(
  19. CacheNameConstant.AUTHORIZATION_TOKEN, user_id
  20. )
  21. if token_cache and token_cache == token:
  22. request.state.user_id = user_id
  23. await CurrentUserProvider.set_current_user(user_id)
  24. else:
  25. logger.error(f"token缓存不一致")
  26. except Exception as e:
  27. logger.error(f"认证失败,{str(e)}")
  28. response = await call_next(request)
  29. return response