/
sg41
/
FinApp
Обзор
Документация
Войти
/
sg41
/
FinApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
backend/auth.py
63 строки
2 KB
Сергей Горбатенко
Refactor structure
08 ноя 2025, 18:17
08 ноя 2025, 18:17
14323c8
Код
Авторство
О чём код?
# auth.py from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2PasswordRequestForm from sqlalchemy.orm import Session from jose import JWTError from starlette.requests import Request from urllib.parse import unquote from database import get_db from models import User from security import verify_password, create_access_token, ACCESS_TOKEN_EXPIRE_MINUTES, get_password_hash from schemas import UserLogin, Token, UserCreate,UserResponse, TokenWithUser from datetime import timedelta from utils import log_request, logger router = APIRouter(prefix="/auth", tags=["auth"]) def authenticate_user(db: Session, email: str, password: str): user = db.query(User).filter(User.email == email).first() if not user or not verify_password(password, user.hashed_password): return False return user @router.post("/register", response_model=UserResponse) def register(user: UserCreate, db: Session = Depends(get_db)): db_user = db.query(User).filter(User.email == user.email).first() if db_user: raise HTTPException(status_code=400, detail="Email already registered") hashed_pw = get_password_hash(user.password) new_user = User(email=user.email, hashed_password=hashed_pw) db.add(new_user) db.commit() db.refresh(new_user) return new_user @router.post("/login", response_model=TokenWithUser) # <-- ИЗМЕНЕНИЕ 1: используем новую модель async def login( form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db) ): email = form_data.username password = form_data.password user_obj = authenticate_user(db, email, password) if not user_obj: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect email or password", headers={"WWW-Authenticate": "Bearer"}, ) access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) access_token = create_access_token( data={"sub": user_obj.email}, expires_delta=access_token_expires ) # v-- ИЗМЕНЕНИЕ 2: добавляем user_id в ответ --v return { "access_token": access_token, "token_type": "bearer", "user_id": user_obj.id }