Невозможно получить куки access и refresh в куках http only
Я создаю веб-приложение Django jwt authentication и пытаюсь получить токены доступа и обновления через HTTP-only cookies. Но фронт-энд может получить только токен обновления, а не токен доступа, поэтому я не могу войти в систему.
Фронтенд выполнен на React, и я использовал {withCredentials: true}
, однако я получаю только токен обновления, а не токен доступа
Файл Authentication.py
import jwt, datetime
from django.contrib.auth import get_user_model
from django.utils import timezone
from django.conf import settings
from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication, get_authorization_header
User = get_user_model()
secret_key = settings.SECRET_KEY
class JWTAuthentication(BaseAuthentication):
def authenticate(self, request):
auth = get_authorization_header(request).split()
if auth and len(auth) == 2:
token = auth[1].decode('utf-8')
id = decode_access_token(token)
user = User.objects.get(pk=id)
return (user, None)
raise exceptions.AuthenticationFailed('Unauthenticated')
def create_access_token(id):
return jwt.encode({
'user_id': id,
'exp': timezone.now() + datetime.timedelta(seconds=60),
'iat': timezone.now()
}, 'access_secret', algorithm='HS256')
def decode_access_token(token):
try:
payload = jwt.decode(token, 'access_secret', algorithms='HS256')
return payload['user_id']
except:
raise exceptions.AuthenticationFailed('Unauthenticated')
def create_refresh_token(id):
return jwt.encode({
'user_id': id,
'exp': timezone.now() + datetime.timedelta(days=10),
'iat': timezone.now()
}, 'refresh_secret', algorithm='HS256')
def decode_refresh_token(token):
try:
payload = jwt.decode(token, 'refresh_secret', algorithms='HS256')
return payload['user_id']
except:
raise exceptions.AuthenticationFailed('Unauthenticated')
файлviews.py
файл serialziers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "email", "first_name", "last_name", "is_staff", "is_superuser", "team", "gender", "employment_type", "work_location", "profile_picture", "password"]
extra_kawargs = {
'password': {'write_only': True}
}
def create(self, validated_data):
password = validated_data.pop('password', None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
При попытке войти в систему выдает:
GET http://127.0.0.1:8000/api/user/ 403 (Forbidden)
Похоже, что проблема кроется в UserAPIView или RefreshAPI