Django возвращает 500 вместо 401 / 403, когда токен не передан
У меня есть представление Django, которое требует аутентификации пользователя (приложение использует jwt), Когда запрос передается без заголовка Authorization, ответ 500, я хочу, чтобы он был 401 / 403, потому что он не должен возвращать внутреннюю ошибку сервера, а неавторизованную ошибку.
Я много искал и не смог найти способ настроить это поведение
Вот код:
views.py:
class GetProfileAPIView(APIView):
permissions_classes = [permissions.IsAuthenticated]
def get(self, request):
user = self.request.user
user_profile = Profile.objects.get(user=user)
serializer = ProfileSerializer(user_profile, context={"request": request})
return Response(serializer.data, status=status.HTTP_200_OK)
настройки:
DJOSER = {
"LOGIN_FIELD": "email",
"USER_CREATE_PASSWORD_RETYPE": True,
"USERNAME_CHANGED_EMAIL_CONFIRMATION": True,
"PASSWORD_CHANGED_EMAIL_CONFIRMATION": True,
"SEND_CONFIRMATION_EMAIL": True,
"PASSWORD_RESET_CONFIRM_URL": "password/reset/confirm/{uid}/{token}",
"SET_PASSWORD_RETYPE": True,
"PASSWORD_RESET_CONFIRM_RETYPE": True,
"USERNAME_RESET_CONFIRM_URL": "email/reset/confirm/{uid}/{token}",
"ACTIVATION_URL": "activate/{uid}/{token}",
"SEND_ACTIVATION_EMAIL": True,
"SERIALIZERS": {
"user_create": "apps.users.serializers.CreateUserSerializer,",
"user": "apps.users.serializers.UserSerializer",
"current_user": "apps.users.serializers.UserSerializer",
"user_delete": "djoser.serializers.UserDeleteSerializer",
},
}
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_simplejwt.authentication.JWTAuthentication",
)
}
SIMPLE_JWT = {
"AUTH_HEADER_TYPES": (
"Bearer",
"JWT",
),
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=120),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
"SIGNING_KEY": "supersecretkey~!",
"AUTH_HEADER_NAME": "HTTP_AUTHORIZATION",
"AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",),
}
enter code here
Я использую разрешения_классов следующим образом:
class HLogViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated, partial(IsAllowed, 'WCloud_HLog')]