ay/backend/routers/auth.py
2025-06-24 18:17:53 +02:00

45 lines
1.9 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from fastapi.security import OAuth2PasswordRequestForm
from datetime import timedelta
# Importations ABSOLUES
from core.database import get_db
from core.security import verify_password, create_access_token
from crud import user as crud_user # Était déjà correcte pour "crud", mais assure la cohérence
from schemas import user as schemas_user
from core.config import settings
from core.hashing import verify_password
router = APIRouter(
prefix="/auth",
tags=["Authentication"],
responses={404: {"description": "Not found"}},
)
ACCESS_TOKEN_EXPIRE_MINUTES = settings.ACCESS_TOKEN_EXPIRE_MINUTES
@router.post("/register", response_model=schemas_user.UserResponse, status_code=status.HTTP_201_CREATED)
def register_user(user: schemas_user.UserCreate, db: Session = Depends(get_db)):
db_user = crud_user.get_user_by_email(db, email=user.email)
if db_user:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Email déjà enregistré.")
new_user = crud_user.create_user(db=db, user=user)
return new_user
@router.post("/login", response_model=dict)
def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
user = crud_user.get_user_by_email(db, email=form_data.username)
if not user or not verify_password(form_data.password, user.hashed_password):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Identifiants incorrects",
headers={"WWW-Authenticate": "Bearer"},
)
access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
access_token = create_access_token(
data={"sub": user.email}, expires_delta=access_token_expires
)
return {"access_token": access_token, "token_type": "bearer"}