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

#django #django-rest-framework #jwt #django-rest-framework-jwt

#джанго #django-rest-фреймворк #агентство jwt #django-rest-фреймворк-jwt

Вопрос:

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

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

 class GetUserViewSet(viewsets.GenericViewSet,  mixins.ListModelMixin,  mixins.RetrieveModelMixin):   # allowed for everyone  serializer_class = UserSerializer  permission_classes = [permissions.AllowAny]  queryset = User.objects.all()  

Разрешения установлены так, чтобы разрешать любые, но, вероятно, существует некоторое несоответствие с классом аутентификации по умолчанию в 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("lt;int:quantitygt;/", UserViewSet.as_view({"post": "create"})),  path("", GetUserViewSet.as_view({"get": "list"})),  path("lt;int:pkgt;/", GetUserViewSet.as_view({"get": "retrieve"})),  path("lt;int:pkgt;/", UserViewSet.as_view({"put": "update", "delete": "destroy"})), ]  

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

 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)  

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

Спасибо

Комментарии:

1. Попробуйте удалить разрешение из настроек и задать необходимое разрешение для каждого набора представлений с помощью этой переменной: authentication_classes