mirror of
https://github.com/evgen-app/chess_rpg_backend.git
synced 2024-11-14 21:57:11 +03:00
26 lines
846 B
Python
26 lines
846 B
Python
from rest_framework import authentication
|
|
from rest_framework import exceptions
|
|
from .models import Player
|
|
from .services.jwt import read_jwt
|
|
|
|
|
|
class PlayerAuthentication(authentication.BaseAuthentication):
|
|
def authenticate(self, request):
|
|
|
|
if "Authorization" not in request.headers or not (token := request.headers["Authorization"]):
|
|
raise exceptions.AuthenticationFailed("No credentials provided.")
|
|
|
|
t = read_jwt(token)
|
|
if not t:
|
|
raise exceptions.AuthenticationFailed("Token is incorrect of expired")
|
|
|
|
if "id" not in t:
|
|
raise exceptions.AuthenticationFailed("No user data")
|
|
|
|
try:
|
|
user = Player.objects.get(id=int(t["id"]))
|
|
except Player.DoesNotExist:
|
|
raise exceptions.AuthenticationFailed("No such user")
|
|
|
|
return user, None
|