/
Ru5Kasper
/
Trackly
Обзор
Документация
Войти
/
Ru5Kasper
/
Trackly
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
backend/app/auth.py
73 строки
2 KB
DORANDKOR
fix(backend): use package-like imports
24 мар 2026, 08:02
24 мар 2026, 08:02
ca727da
Код
Авторство
О чём код?
from datetime import UTC, datetime, timedelta import jwt from fastapi.security import OAuth2PasswordBearer from pwdlib import PasswordHash from app.config import settings password_hasher = PasswordHash.recommended() oauth2_scheme = OAuth2PasswordBearer(tokenUrl="api/users/token") def hash_password(password: str) -> str: return password_hasher.hash(password) def verify_password(plain_password, hashed_password) -> bool: return password_hasher.verify(plain_password, hashed_password) def create_access_token(data: dict, expires_delta: timedelta | None = None, refresh: bool = False) -> str: to_encode = data.copy() if expires_delta: expire = datetime.now(UTC) + expires_delta else: expire = datetime.now(UTC) + timedelta( minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES ) to_encode.update({"exp": expire}) to_encode.update({"refresh": refresh}) encoded_jwt = jwt.encode( to_encode, settings.JWT_SECRET.get_secret_value(), algorithm=settings.ALGORITHM ) return encoded_jwt def create_refresh_token(data: dict, expires_delta: timedelta | None = None) -> str: if expires_delta is None: expires_delta = timedelta(days=settings.REFRESH_TOKEN_EXPIRE_DAYS) return create_access_token(data=data, expires_delta=expires_delta, refresh=True) def verify_access_token(token: str) -> str | None: try: payload = jwt.decode( token, settings.JWT_SECRET.get_secret_value(), algorithms=[settings.ALGORITHM], options={"require": ["exp", "sub", "refresh"]}, ) except jwt.InvalidTokenError: return None if payload.get("refresh"): return None return payload.get("sub") def verify_refresh_token(token: str) -> str | None: try: payload = jwt.decode( token, settings.JWT_SECRET.get_secret_value(), algorithms=[settings.ALGORITHM], options={"require": ["exp", "sub", "refresh"]}, ) except jwt.InvalidTokenError: return None if not payload.get("refresh"): return None return payload.get("sub")