chess_rpg_backend/game/authentication.py

28 lines
868 B
Python
Raw Normal View History

2022-06-05 13:09:27 +03:00
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):
2022-06-05 21:28:20 +03:00
2022-06-06 20:15:45 +03:00
if "Authorization" not in request.headers or not (
token := request.headers["Authorization"]
):
2022-06-05 13:09:27 +03:00
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