DRF - JWT Как исправить токен все еще активным после истечения срока действия? - PullRequest
1 голос
/ 12 февраля 2020

Я использую Djangorestframework с библиотекой djangorestframework-simplejwt, система токенов работает, за исключением того, что после истечения срока действия маркера доступа и refre sh (я могу подтвердить это с почтальоном) приложение frontent (Vue & ax *) 1010 *) может по-прежнему получать обновленные данные, как это возможно? Когда я проверяю запрос топора ios, токен совпадает с токеном, который я использую в почтальоне, в Почтальоне он выдает мне «Токен недействителен или просрочен», но в топоре ios он получает все данные и 200 ОК.

Это конфиги:

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
    'REFRESH_TOKEN_LIFETIME': timedelta(hours=24),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'AUTH_HEADER_TYPES': ('JWT',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
}
urls.py

from rest_framework_simplejwt.views import TokenRefreshView
from dgmon.views import MyTokenObtainPairView
app_name = 'dgmon'

admin.site.site_header = settings.ADMIN_SITE_HEADER
admin.site.site_title = settings.ADMIN_SITE_TITLE

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^', include('dgmon.urls')),
    path('api/token/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/refresh/', TokenRefreshView.as_view(), name='token_refresh'),

]
views.py

from rest_framework_simplejwt.views import TokenObtainPairView
from dgmon.serializers import MyTokenObtainPairSerializer


class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer

serializers.py

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer


class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
        data = super().validate(attrs)
        refresh = self.get_token(self.user)
        data['refresh'] = str(refresh)
        data['access'] = str(refresh.access_token)

        data['user'] = self.user.username
        data['groups'] = self.user.groups.values_list('name', flat=True)
        return data

...