30 lines
920 B
Python
30 lines
920 B
Python
import jwt
|
|
from django.conf import settings
|
|
from rest_framework.authentication import BaseAuthentication
|
|
from rest_framework.exceptions import AuthenticationFailed
|
|
|
|
from users.models import Profile
|
|
|
|
|
|
class JWTAuthentication(BaseAuthentication):
|
|
def authenticate(self, request):
|
|
token = request.headers.get("Authorization", "").split("Bearer ")[-1]
|
|
|
|
if not token:
|
|
return None
|
|
|
|
try:
|
|
payload = jwt.decode(
|
|
token, settings.SECRET_KEY, algorithms=["HS256"]
|
|
)
|
|
|
|
user = Profile.objects.get(login=payload["login"])
|
|
|
|
return (user, None)
|
|
except Profile.DoesNotExist:
|
|
raise AuthenticationFailed("Invalid token")
|
|
except jwt.ExpiredSignatureError:
|
|
raise AuthenticationFailed("Token has expired")
|
|
except jwt.InvalidTokenError:
|
|
raise AuthenticationFailed("Invalid token")
|