26 lines
944 B
Python
26 lines
944 B
Python
from fastapi import Request
|
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
|
|
from app.services.auth import decode_access_token
|
|
|
|
_PUBLIC_PATHS = {"/api/v1/auth/login", "/api/v1/auth/refresh", "/docs", "/openapi.json", "/redoc"}
|
|
|
|
|
|
class AuthMiddleware(BaseHTTPMiddleware):
|
|
async def dispatch(self, request: Request, call_next):
|
|
path = request.url.path
|
|
if path in _PUBLIC_PATHS or path.startswith("/docs") or path.startswith("/redoc"):
|
|
return await call_next(request)
|
|
|
|
auth_header = request.headers.get("Authorization", "")
|
|
if auth_header.startswith("Bearer "):
|
|
token = auth_header[7:]
|
|
user_id = decode_access_token(token)
|
|
if user_id is not None:
|
|
request.state.user_id = user_id
|
|
else:
|
|
request.state.user_id = None
|
|
else:
|
|
request.state.user_id = None
|
|
|
|
return await call_next(request)
|