utp_service/backend/app/middleware/auth.py
2026-04-07 00:00:50 +03:00

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)