Просроченный токен доступа подтвержден и возвращает данные из представления в 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.