Просроченный токен доступа подтвержден и возвращает данные из представления в django

Я создаю приложение, которое отправляет и рефреш, и токены доступа; также в этом приложении есть ModelViewSet под названием Users (возвращает всех пользователей в базе данных), где permission_classes только для IsAuthenticated, все вроде работает отлично.

Но когда срок действия токена доступа истекает и устанавливается заголовок Authentication = 'Bearer ${access_token}', ModelView возвращает данные, несмотря на истечение срока действия токена доступа, и проверяет тот же токен с помощью TokenVerifyView, то возвращает:

{
    "detail": "Token is invalid or expired",
    "code": "token_not_valid"
}

Я использую rest_framework и rest_framework_simplejwt ACCESS_TOKEN_LIFETIME равно 10sec и DEFAULT_AUTHENTICATION_CLASSES по умолчанию из самой lib

class UserViewSet(ModelViewSet):
    permission_classes = [permissions.IsAuthenticated,]
    queryset = User.objects.all()
    serializer_class = UserSerializer
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(seconds=10),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': False,
    'UPDATE_LAST_LOGIN': False,

    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUDIENCE': None,
    'ISSUER': None,
    'JWK_URL': None,
    'LEEWAY': 0,

    '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',
    'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',

    'JTI_CLAIM': 'jti',

    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}

Нужно ли мне создать класс аутентификации и добавить его в DEFAULT_AUTHENTICATION_CLASSES, или есть предопределенный способ решения этой проблемы, так что если срок действия токена истек, возвращать статус с 403

Единственное, что мне приходит в голову, это изменить DEFAULT_AUTHENTICATION_CLASSES, перейдите по ссылке ниже

https://idiomaticprogrammers.com/post/how-to-implement-auto-expiring-token-in-django-rest-framework/

Вам необходимо добавить DEFAULT_AUTHENTICATION_CLASSES

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

следуйте руководству по документации здесь

Мне просто нужно было обновить djangorestframework-simplejwt до последней версии, у меня была 5.2.1, и я обновил ее до 5.2.2.

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