deps.py 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. from typing import Annotated, Any
  2. from fastapi import Depends, HTTPException, status
  3. from fastapi.security import OAuth2PasswordBearer
  4. from jose import JWTError, jwt
  5. from app.core.security import SECRET_KEY, ALGORITHM
  6. from app.db.session import get_db
  7. from app.crud import get_user_by_username
  8. from app.schemas import TokenData
  9. oauth2_scheme = OAuth2PasswordBearer(tokenUrl="api/v1/auth/login")
  10. def get_current_user(token: Annotated[str, Depends(oauth2_scheme)], db: Any = Depends(get_db)):
  11. credentials_exception = HTTPException(
  12. status_code=status.HTTP_401_UNAUTHORIZED,
  13. detail="Could not validate credentials",
  14. headers={"WWW-Authenticate": "Bearer"},
  15. )
  16. try:
  17. payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
  18. username: str = payload.get("sub")
  19. if username is None:
  20. raise credentials_exception
  21. token_data = TokenData(username=username)
  22. except JWTError:
  23. raise credentials_exception
  24. user = get_user_by_username(db, username=token_data.username)
  25. if user is None:
  26. raise credentials_exception
  27. return user