Files
DataRush/services/backend/api/v1/auth.py
T
Андрей Сумин e34c8ae3a7 fix: incorrect token 500
2025-03-01 19:11:45 +03:00

34 lines
977 B
Python

import datetime
from typing import Any
import jwt
from django.conf import settings
from django.http import HttpRequest
from ninja.security import HttpBearer
from redis.exceptions import AuthorizationError
from apps.user.models import User
class BearerAuth(HttpBearer):
def authenticate(self, request: HttpRequest, token: str) -> Any | None:
try:
data = jwt.decode(token, settings.SECRET_KEY, algorithms=["HS256"])
if data["exp"] < datetime.datetime.now().timestamp():
return None
except Exception:
raise AuthorizationError
user = User.objects.get(id=data["id"])
return user
@staticmethod
def generate_jwt(user: User) -> str:
data = {
"exp": (
datetime.datetime.now() + datetime.timedelta(days=365)
).timestamp(),
"id": str(user.id),
}
return jwt.encode(data, settings.SECRET_KEY, algorithm="HS256")