Django reatApi Запрос пользователя является анонимным при использовании jwt-куки
Я создаю новое приложение django restApi в рамках моего приложения для пользователей Я использую jwt аутентификацию в настоящее время я могу зарегистрироваться, войти в систему, хранить куки и отправить запрос get после входа в систему с действительными учетными данными. Моя проблема в том, что когда я получаю аутентифицированный запрос get, я не могу увидеть пользователя запроса, он отображается как AnonymousUser. Прилагаю пост-запрос на вход и код запроса на получение от конечной точки restApi.
from django.shortcuts import render
from rest_framework.exceptions import AuthenticationFailed
# Create your views here.
from rest_framework.views import APIView
from .models import User
from .serializers import UserSerializer
from rest_framework.response import Response
import jwt,datetime
class RegisterView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
class LoginView(APIView):
def post(self, request):
email = request.data['email']
password = request.data['password']
user = User.objects.filter(email=email).first()
if user is None:
raise AuthenticationFailed('User not found')
if not user.check_password(password):
raise AuthenticationFailed('Incorrect password')
payload={'id':user.id,'exp':datetime.datetime.utcnow()+datetime.timedelta(minutes=60),
'iat':datetime.datetime.utcnow()}
token = jwt.encode(payload, 'secret', algorithm='HS256')
response = Response()
response.set_cookie(key='jwt',value=token,httponly=True)
response.data={'jwt':token}
return response
class UserView(APIView):
def get(self, request):
token = request.COOKIES.get('jwt')
if token is None:
raise AuthenticationFailed('Unauthenticatedddd')
try:
payload=jwt.decode(token,'secret',algorithms=['HS256'])
except jwt.ExpiredSignatureError:
raise AuthenticationFailed('Unauthenticated')
user = User.objects.filter(id=payload['id']).first()
serializer = UserSerializer(user)
return Response(serializer.data)
class UsserLogoutView(APIView):
def post(self, request):
response = Response()
response.delete_cookie('jwt')
response.data = {'message': 'You have been logged out'}
return response
from django.shortcuts import render
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.response import Response
from rest_framework.views import APIView
import jwt
from .models import Subject, Question
from .serializers import SubjectSerializer, YearsSerializer
# Create your views here.
class SubjectsView(APIView):
def get(self, request):
token = request.COOKIES.get('jwt')
if token is None:
raise AuthenticationFailed('Unauthenticated')
try:
jwt.decode(token,'secret',algorithms=['HS256'])
except jwt.ExpiredSignatureError:
raise AuthenticationFailed('Unauthenticated')
subjects = Subject.objects.filter()
serializer = SubjectSerializer(subjects, many=True)
return Response(serializer.data)```
I was looking for a way to store a token with it's relevant user with no success