/
tinypot
/
integr
Обзор
Документация
Войти
/
tinypot
/
integr
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
task_management_api/app/api/v1/auth.py
77 строк
2 KB
Tim Polus
lab1
21 янв 2026, 23:15
21 янв 2026, 23:15
dd1578c
Код
Авторство
О чём код?
""" Authentication API endpoints """ from datetime import timedelta from typing import Any from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2PasswordRequestForm from sqlalchemy.ext.asyncio import AsyncSession from app.core.config import settings from app.core.database import get_db from app.core.security import create_access_token from app.models.user import User from app.schemas.token import Token from app.schemas.user import UserCreate, User from app.services.user_service import UserService router = APIRouter() @router.post("/register", response_model=User, status_code=status.HTTP_201_CREATED) async def register( user_in: UserCreate, db: AsyncSession = Depends(get_db), ) -> Any: """ Register a new user """ # Check if user already exists user = await UserService.get_by_email(db, email=user_in.email) if user: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered" ) user = await UserService.get_by_username(db, username=user_in.username) if user: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Username already taken" ) # Create user user = await UserService.create(db, user_in=user_in) return user @router.post("/login", response_model=Token) async def login( db: AsyncSession = Depends(get_db), form_data: OAuth2PasswordRequestForm = Depends() ) -> Any: """ OAuth2 compatible token login, get an access token for future requests """ user = await UserService.authenticate( db, username=form_data.username, password=form_data.password ) if not user: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Incorrect username or password" ) elif not await UserService.is_active(user): raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Inactive user" ) access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) access_token = create_access_token( subject=user.username, expires_delta=access_token_expires ) return {"access_token": access_token, "token_type": "bearer"}