Spaces:
Sleeping
Sleeping
from typing import Optional | |
from fastapi import APIRouter, Form, HTTPException | |
from datetime import timedelta | |
import common.auth as auth | |
router = APIRouter(prefix="/auth", tags=["Auth"]) | |
async def login(username: Optional[str] = Form(default=None), | |
password: Optional[str] = Form(default=None), | |
request: Optional[auth.LoginRequest] = None): | |
# Если данные пришли через Form Data | |
if username is not None and password is not None: | |
final_username = username | |
final_password = password | |
# Если данные пришли через JSON | |
elif request is not None: | |
final_username = request.username | |
final_password = request.password | |
else: | |
raise HTTPException(status_code=400, detail="Не указаны логин и пароль") | |
user = next((u for u in auth.USERS if u["username"] == final_username), None) | |
if not user or user["password"] != final_password: | |
raise HTTPException(status_code=401, detail="Неверный логин или пароль") | |
access_token_expires = timedelta(minutes=auth.ACCESS_TOKEN_EXPIRE_MINUTES) | |
access_token = auth.create_access_token( | |
data={"sub": user["username"]}, expires_delta=access_token_expires | |
) | |
return {"access_token": access_token, "token_type": "bearer"} |