Spaces:
Sleeping
Sleeping
| from datetime import timedelta | |
| from fastapi import APIRouter, Depends, HTTPException, status | |
| from fastapi.security import OAuth2PasswordRequestForm | |
| from sqlalchemy.orm import Session | |
| from database import get_db | |
| from schemas import UserCreate, UserResponse, Token | |
| from auth import ( | |
| authenticate_user, | |
| create_access_token, | |
| create_user, | |
| get_current_active_user | |
| ) | |
| from config import get_settings | |
| from models import User | |
| settings = get_settings() | |
| router = APIRouter(prefix="/api/auth", tags=["Authentication"]) | |
| async def register(user_data: UserCreate, db: Session = Depends(get_db)): | |
| """Регистрация нового пользователя""" | |
| user = create_user( | |
| db=db, | |
| username=user_data.username, | |
| email=user_data.email, | |
| password=user_data.password | |
| ) | |
| return user | |
| async def login( | |
| form_data: OAuth2PasswordRequestForm = Depends(), | |
| db: Session = Depends(get_db) | |
| ): | |
| """Вход в систему""" | |
| user = authenticate_user(db, form_data.username, form_data.password) | |
| if not user: | |
| raise HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail="Incorrect username or password", | |
| headers={"WWW-Authenticate": "Bearer"}, | |
| ) | |
| # Обновление времени последнего входа | |
| from datetime import datetime | |
| user.last_login = datetime.utcnow() | |
| db.commit() | |
| access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) | |
| access_token = create_access_token( | |
| data={"sub": user.username}, expires_delta=access_token_expires | |
| ) | |
| return {"access_token": access_token, "token_type": "bearer"} | |
| async def read_users_me(current_user: User = Depends(get_current_active_user)): | |
| """Получение информации о текущем пользователе""" | |
| return current_user | |
| async def logout(current_user: User = Depends(get_current_active_user)): | |
| """Выход из системы""" | |
| return {"message": "Successfully logged out"} | |