Получение ошибки "Учетные данные для аутентификации не были предоставлены", когда я не хочу требовать аутентификацию

У меня есть проект с JWT аутентификацией в Django Rest Framework. Обычно я требую аутентификации пользователя, но в случае действия GET (как list, так и retrieve) я хотел бы, чтобы каждый мог получить доступ к нему без необходимости аутентификации.

Код для этой функциональности очень прост:

class GetUserViewSet(viewsets.GenericViewSet,
                     mixins.ListModelMixin,
                     mixins.RetrieveModelMixin):

    # allowed for everyone
    serializer_class = UserSerializer
    permission_classes = [permissions.AllowAny]
    queryset = User.objects.all()

Разрешения установлены так, чтобы разрешить любые, но, возможно, существует некоторая несогласованность с классом auth по умолчанию в Settings.py

# --------------------------REST-framework--------------------------
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticatedOrReadOnly'
    ],

    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework_simplejwt.authentication.JWTAuthentication",
    ),
    'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}

Последнее, что может иметь значение - это мои конечные точки:

urlpatterns = [
    path("", UserViewSet.as_view({"post": "create"}), kwargs={'quantity': 1}),
    path("<int:quantity>/", UserViewSet.as_view({"post": "create"})),
    path("", GetUserViewSet.as_view({"get": "list"})),
    path("<int:pk>/", GetUserViewSet.as_view({"get": "retrieve"})),
    path("<int:pk>/", UserViewSet.as_view({"put": "update", "delete": "destroy"})),
]

Я не понимаю, что в других приложениях, где у меня есть функция регистрации, такой ошибки нет. Я покажу вам этот viewset:

class ApiUserViewSet(viewsets.GenericViewSet, mixins.CreateModelMixin):
    serializer_class = ApiUserSerializer
    permission_classes = [permissions.AllowAny]
    queryset = ApiUser.objects.all()

    @extend_schema(request=ApiUserSerializer, responses=TokenSerializer)
    def create(self, request, *args, **kwargs):
        api_user_serializer = self.get_serializer(data=request.data)
        api_user_serializer.is_valid(raise_exception=True)
        api_user = api_user_serializer.save()

        refresh = RefreshToken.for_user(api_user)

        token_serializer = TokenSerializer(
            data={
                "access": str(refresh.access_token),
                "refresh": str(refresh)
            }
        )

        token_serializer.is_valid(raise_exception=True)

        headers = self.get_success_headers(token_serializer.data)

        return Response(token_serializer.data, status=status.HTTP_201_CREATED, headers=headers)

Если у вас есть идеи, что может быть не так, пожалуйста, дайте мне знать!

Спасибо

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