| 12345678910111213141516171819202122232425262728293031 |
- from typing import Annotated, Any
- from fastapi import Depends, HTTPException, status
- from fastapi.security import OAuth2PasswordBearer
- from jose import JWTError, jwt
- from app.core.security import SECRET_KEY, ALGORITHM
- from app.db.session import get_db
- from app.crud import get_user_by_username
- from app.schemas import TokenData
- oauth2_scheme = OAuth2PasswordBearer(tokenUrl="api/v1/auth/login")
- def get_current_user(token: Annotated[str, Depends(oauth2_scheme)], db: Any = Depends(get_db)):
- credentials_exception = HTTPException(
- status_code=status.HTTP_401_UNAUTHORIZED,
- detail="Could not validate credentials",
- headers={"WWW-Authenticate": "Bearer"},
- )
- try:
- payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
- username: str = payload.get("sub")
- if username is None:
- raise credentials_exception
- token_data = TokenData(username=username)
- except JWTError:
- raise credentials_exception
-
- user = get_user_by_username(db, username=token_data.username)
- if user is None:
- raise credentials_exception
- return user
|