oauth_token.py 1000 B

123456789101112131415161718192021222324252627282930
  1. from datetime import datetime, timedelta, timezone
  2. from jose import JWTError, jwt
  3. from fastapi import HTTPException, status
  4. from fastapi.security import OAuth2PasswordBearer
  5. from .config import settings
  6. SECRET_KEY = settings.SECRET_KEY
  7. ALGORITHM = settings.ALGORITHM
  8. ACCESS_TOKEN_EXPIRE_MINUTES = settings.ACCESS_TOKEN_EXPIRE_MINUTES
  9. oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
  10. def create_access_token(data: dict):
  11. to_encode = data.copy()
  12. expire = datetime.now(timezone.utc) + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
  13. to_encode.update({"exp": expire})
  14. return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
  15. def verify_token(token: str):
  16. try:
  17. payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
  18. return payload
  19. except JWTError:
  20. raise HTTPException(
  21. status_code=status.HTTP_401_UNAUTHORIZED,
  22. detail="Invalid or expired token",
  23. headers={"WWW-Authenticate": "Bearer"},
  24. )