Files
fast_api_api_template/api/routes/auth.py
Kevin ANATOLE 6700a4e2ef Register
Login
Basic migrations with alembic
Get items
2023-02-19 02:47:14 +00:00

37 lines
1.4 KiB
Python

from datetime import timedelta
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.orm import Session
import deps
from api.config import settings
from crud.users import authenticate_user, create_access_token, get_user_by_email, create_user
from schemas.users import UserCreate, User
router = APIRouter()
@router.post("/token", response_model=deps.Token)
async def login_for_access_token(db: Session = Depends(deps.get_db), form_data: OAuth2PasswordRequestForm = Depends()):
user = authenticate_user(db, form_data.username, form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token_expires = timedelta(minutes=settings.access_token_expire_minutes)
access_token = create_access_token(
data={"sub": str(user.id)}, expires_delta=access_token_expires
)
return {"access_token": access_token, "token_type": "bearer"}
@router.post("/register", response_model=User)
async def register(user: UserCreate, db: Session = Depends(deps.get_db)):
db_user = get_user_by_email(db, email=user.email)
if db_user:
raise HTTPException(status_code=400, detail="Email already registered")
return create_user(db=db, user=user)