auth.py 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. from datetime import timedelta
  2. from typing import Any
  3. from fastapi import APIRouter, Depends, HTTPException, status
  4. from fastapi.security import OAuth2PasswordRequestForm
  5. from sqlalchemy.orm import Session
  6. from backend.app.core import security
  7. from backend.app.core.config import settings
  8. from backend.app.core.database import get_db
  9. from backend.app.models import sql_models
  10. from backend.app.schemas import schemas
  11. router = APIRouter()
  12. @router.post("/login", response_model=schemas.Token)
  13. def login_access_token(
  14. db: Session = Depends(get_db),
  15. form_data: OAuth2PasswordRequestForm = Depends()
  16. ) -> Any:
  17. user = db.query(sql_models.User).filter(sql_models.User.username == form_data.username).first()
  18. if not user or not security.verify_password(form_data.password, user.hashed_password):
  19. raise HTTPException(
  20. status_code=status.HTTP_401_UNAUTHORIZED,
  21. detail="Incorrect username or password",
  22. )
  23. access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
  24. access_token = security.create_access_token(
  25. data={"sub": user.username}, expires_delta=access_token_expires
  26. )
  27. return {"access_token": access_token, "token_type": "bearer"}