Django simple_jwt auth работал с пустым токеном
В моем проекте используется jwt авторизация на основе библиотеки simple_jwt. Несмотря на то, что я не передаю заголовок Authorization: Bearer token header, запрос проходит и возвращается 201, но если я передаю неправильный токен, все работает как надо и возвращается 401. Мои настройки:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'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': 'phone_number',
'USER_ID_CLAIM': 'client_phone_number',
'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),
}
MyView:
class SetPin(generics.CreateAPIView):
"""Change or set pin code"""
serializer_class = serializers.PinSerializer
Как я вижу из ваших настроек, похоже, что вы не указали разрешение модели, и по умолчанию Django будет использовать разрешение AllowAny.
Политика разрешений по умолчанию может быть установлена глобально, с помощью параметра DEFAULT_PERMISSION_CLASSES. Например.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
Если не указано, этот параметр по умолчанию разрешает неограниченный доступ:
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]