Spaces:
Runtime error
Runtime error
File size: 1,548 Bytes
55fd541 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | from datetime import datetime, timedelta
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt
from app.database import get_db
from app.models.users import User
from app.schemas.token import TokenData
from sqlalchemy.orm import Session
from app.config import setting
oauth2_scheme=OAuth2PasswordBearer(tokenUrl="login")
SECRET_KEY=setting.secret_key
ALGORITHM=setting.algorithm
ACCESS_TOKEN_EXPIRE_MINUTES=setting.access_token_expire_minutes
def Create_Access_Token(data: dict):
payload=data.copy()
expire = datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
payload.update({"exp": expire})
encoded_jwt=jwt.encode(payload,SECRET_KEY,algorithm=ALGORITHM)
return encoded_jwt
def Verify_Access_Token(token: str, credentials_exception):
try:
payload=jwt.decode(token,SECRET_KEY,algorithms=[ALGORITHM])
id=payload.get("id")
if id is None:
raise credentials_exception
token_data=TokenData(**payload)
return token_data
except JWTError:
raise credentials_exception
def Get_Current_User(token: str = Depends(oauth2_scheme), db: Session = Depends(get_db)):
credentials_exception=HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
detail="Could not validate Credentials",headers={"WWW-Authenticate": "Bearer"})
token = Verify_Access_Token(token,credentials_exception)
user=db.query(User).filter(User.id==token.id).first()
return user
|