From f39c54acb79364e29f5d836521a7c54442369d8c Mon Sep 17 00:00:00 2001 From: host Date: Sun, 9 Aug 2026 14:22:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0?= =?UTF-8?q?=20JWT-=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/deps.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 backend/app/deps.py diff --git a/backend/app/deps.py b/backend/app/deps.py new file mode 100644 index 0000000..c9b6331 --- /dev/null +++ b/backend/app/deps.py @@ -0,0 +1,31 @@ +from fastapi import Depends, HTTPException, status +from fastapi.security import OAuth2PasswordBearer +from sqlalchemy.orm import Session + +from . import models +from .database import get_db +from .security import decode_access_token + +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login") + + +def get_current_user( + token: str = Depends(oauth2_scheme), db: Session = Depends(get_db) +) -> models.User: + """Возвращает активного пользователя по Bearer JWT.""" + credentials_error = HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Не удалось подтвердить учётные данные", + headers={"WWW-Authenticate": "Bearer"}, + ) + payload = decode_access_token(token) + if not payload or not payload.get("sub"): + raise credentials_error + try: + user_id = int(payload["sub"]) + except (TypeError, ValueError): + raise credentials_error + user = db.get(models.User, user_id) + if user is None or not user.is_active: + raise credentials_error + return user