REST API Django Authentication не возвращает обновление в пакете Simple Rest

Я изучаю DJANGO REST API и мой источник обучения - курс UDEMY 2017, и преподаватель использует django 1.1 для Rest framework для JWT, тогда как на моей системе он не поддерживается. Поэтому сайт Django REST API рекомендует использовать Simple JWT.

Поэтому я решил использовать Simple JWT. Мой источник https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html#installation

Так что в **settings** я поместил :

from datetime import timedelta

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        
    ),
    
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_FILTER_BACKENDS':(
        'rest_framework.filters.SearchFilter',
        'rest_framework.filters.OrderingFilter',
    ),
    'SEARCH_PARAM':'search',
    'ORDERING_PARAM':'ordering',
}
JWT_AUTH = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'UPDATE_LAST_LOGIN': True,
    'AUTH_HEADER_TYPES': ('Bearer',),
    'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
    'JTI_CLAIM': 'jti',
    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}



**in my scripts/rest_framework_api.py :**

import requests
import json

AUTH_ENDPOINT = "http://127.0.0.1:8000/api/auth/jwt/"
REFRESH_ENDPOINT = AUTH_ENDPOINT + "refresh/"

ENDPOINT="http://127.0.0.1:8000/api/status/"


headers = { "Content-Type": "application/json" }

data = {
    'username':'lulu',
    'password':'lulu'
}


r = requests.post(AUTH_ENDPOINT,data=json.dumps(data),headers=headers)
token = r.json()['access'] 


refresh_data = { 'token': token }
new_response = requests.post(REFRESH_ENDPOINT,data=json.dumps(refresh_data),headers=headers)
new_token = new_response.json()

print(new_token)

в урлах :

from django.contrib import admin
from django.urls import path,include
from rest_framework_simplejwt.views import (TokenObtainPairView,TokenRefreshView,)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/auth/jwt/', TokenObtainPairView.as_view()),
    path('api/auth/jwt/refresh/', TokenRefreshView.as_view()),
    path('api/status/', include('status.api.urls'))
 
]

in **views.py** :

from rest_framework import generics, mixins, permissions
from rest_framework.authentication import SessionAuthentication
from rest_framework.views import APIView
from rest_framework.response import Response
import json
from django.shortcuts import get_object_or_404
from status.models import Status 
from .serializers import StatusSerializer


def is_json(json_data):
    try:
        real_json = json.loads(json_data)
        is_valid = True
    except ValueError:
        is_valid = False
    return is_valid


class StatusDetailAPIView(generics.RetrieveAPIView):

    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    serializer_class = StatusSerializer
    queryset = Status.objects.all()
    lookup_field='id'
    




class StatusAPIView(mixins.RetrieveModelMixin,generics.ListAPIView):
   

    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    serializer_class = StatusSerializer
    passed_id= None
    search_fields = ('user__username','content')
  
    queryset = Status.objects.all()


    def perform_create (self,serializer):
       serializer.save(user=self.request.user)

После всего этого на стороне клиента возвращается: {'refresh': ['This field is required.']} На моей стороне я получаю следующее :

[07/Jan/2022 07:12:31] "POST /api/auth/jwt/ HTTP/1.1" 200 483
Bad Request: /api/auth/jwt/refresh/
[07/Jan/2022 07:12:31] "POST /api/auth/jwt/refresh/ HTTP/1.1" 400 39

Может ли кто-нибудь объяснить, что я делаю неправильно? Как это исправить и получить обновление? Тьютор объясняет, что нужно изменить в настройках "JWT_ALLOW_REFRESH":False на True и тогда это работает в его лекциях. Однако в стандартных настройках в Simple JWT нет JWT_ALLOW_REFRESH и настройки отличаются от старых настроек JWT. Что мне нужно сделать? Как мне превратить это в True в Simple JWT ?

если я использую только #

token_refresh = r.json()['refresh'] 
print (token_refresh)

он будет возвращать refresh. Также refresh_data = { 'token': token } если возвращается : token is not recongnised или если я поставлю вместо 'token' 'refresh', он заявляет, что не принимает строку.

Помогите, пожалуйста, разобраться в различиях между этими пакетами и исправить проблемы, с которыми я столкнулся в системе, чтобы мое обновление возвращалось без проблем. Что бы вы порекомендовали сделать?

Ошибочный ответ конечной точки API /api/auth/jwt/refresh/ означает, что вам необходимо поместить токен обновления в поле refresh (а не в поле token) тела POST-запроса в коде тестирования клиента, путь /api/auth/jwt/refresh/ внутренне разрешается в TokenRefreshView, который использует TokenRefreshSerializer для валидации ввода, а сериализатор требует refresh поля.

Вернуться на верх