24 lines
889 B
Python
24 lines
889 B
Python
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from fastapi.security import OAuth2PasswordRequestForm
|
|
|
|
from app.core.dependencies import DbSession
|
|
from app.core.security import create_access_token
|
|
from app.schemas.auth import Token
|
|
from app.services.auth import authenticate_user
|
|
|
|
router = APIRouter(prefix="/api/v1/auth", tags=["auth"])
|
|
|
|
|
|
@router.post("/token", response_model=Token)
|
|
async def login(db: DbSession, form_data: Annotated[OAuth2PasswordRequestForm, Depends()]) -> Token:
|
|
user = await authenticate_user(db, form_data.username, form_data.password)
|
|
if user is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
detail="Incorrect username or password",
|
|
headers={"WWW-Authenticate": "Bearer"},
|
|
)
|
|
return Token(access_token=create_access_token(user.id))
|