| 123456789101112131415161718192021222324252627282930 |
- from datetime import datetime, timedelta, timezone
- from jose import JWTError, jwt
- from fastapi import HTTPException, status
- from fastapi.security import OAuth2PasswordBearer
- from .config import settings
- SECRET_KEY = settings.SECRET_KEY
- ALGORITHM = settings.ALGORITHM
- ACCESS_TOKEN_EXPIRE_MINUTES = settings.ACCESS_TOKEN_EXPIRE_MINUTES
- oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
- def create_access_token(data: dict):
- to_encode = data.copy()
- expire = datetime.now(timezone.utc) + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
- to_encode.update({"exp": expire})
- return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
- def verify_token(token: str):
- try:
- payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
- return payload
- except JWTError:
- raise HTTPException(
- status_code=status.HTTP_401_UNAUTHORIZED,
- detail="Invalid or expired token",
- headers={"WWW-Authenticate": "Bearer"},
- )
|