Простой jwt не возвращает токен обновления
Я использую простой jwt с django rest. Однако я не думаю, что конфигурация JWT_AUTH
работает. Потому что я установил параметр rotate refresh tokens в true, но token-api-refresh
url возвращает только токен доступа, в то время как он должен возвращать и refresh.
В файле settings.py у меня есть
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'shop',
'rest_framework_simplejwt',
'corsheaders',
'django_cleanup'
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
]
}
JWT_AUTH = {
'ACCESS_TOKEN_LIFETIME': datetime.timedelta(minutes=15),
'REFRESH_TOKEN_LIFETIME': datetime.timedelta(days=10),
'ROTATE_REFRESH_TOKENS': True,
}
Мои шаблоны url:
urlpatterns = [
path('admin/', admin.site.urls),
path('api-token/', TokenObtainPairView.as_view()),
path('api-token-refresh/', TokenRefreshView.as_view()),
path("",include("shop.urls"))
]
Моя проблема заключается в api-token-refresh
, поскольку он возвращает только доступ, но согласно документации simple-jwt, если я установлю rotate refresh token
в true, то он также должен возвращать токен обновления наряду с доступом.
Редактирование :
Это сериализатор для обновления токена, который, очевидно, может возвращать оба токена
class TokenRefreshSerializer(serializers.Serializer):
refresh = serializers.CharField()
access = serializers.ReadOnlyField()
def validate(self, attrs):
refresh = RefreshToken(attrs['refresh'])
data = {'access': str(refresh.access_token)}
if api_settings.ROTATE_REFRESH_TOKENS:
if api_settings.BLACKLIST_AFTER_ROTATION:
try:
# Attempt to blacklist the given refresh token
refresh.blacklist()
except AttributeError:
# If blacklist app not installed, `blacklist` method will
# not be present
pass
refresh.set_jti()
refresh.set_exp()
data['refresh'] = str(refresh)
return data