Аутентификация с помощью токена Django Rest Framework с почтальоном - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь использовать Почтальон для проверки моей конечной точки DRF, но я всегда получаю ошибку Authentication credentials were not provided..Конечная точка работает правильно, но я не нашел, как отправить запрос от Почтальон .

Я могу получить токен для пользователя:

enter image description here

Но я всегда получаю ошибку, когда пытаюсь использовать токен для отправки запроса:

enter image description here

Я установил Тип авторизации на Inherit auth from parent.

Это код для вида:

class AlbumViewSet(viewsets.ModelViewSet):
    permission_classes = (permissions.IsAuthenticated,)
    queryset = proxies.AlbumProxy.objects.all()
    serializer_class = serializers.AlbumSerializer
    filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter,)
    search_fields = ('name', 'description', 'company__name')
    filter_fields = ('code', 'company')

    def get_permissions(self):
        if self.action == 'retrieve':
            return []

        return super(AlbumViewSet, self).get_permissions()

    def retrieve(self, request, pk):
        password = request.query_params.get('password', None)

        try:
            instance = proxies.AlbumProxy.objects.get(pk=pk)
        except:
            return Response({'success': False, 'code': 1})

        if instance.access_code != password and password != settings.MASTER_KEY:
            return Response({'success': False, 'code': 2})

        instance_to_return = serializers.AlbumSerializer(instance=instance, context={'request': request}).data
        instance_to_return.pop('access_code')
        instance_to_return['success'] = True

        return Response(instance_to_return)

Это моя REST_FRAMEWORK константаот settings:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 20,
    'DEFAULT_METADATA_CLASS': 'rest_framework.metadata.SimpleMetadata'
}

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Поскольку вы используете Apache, вам необходимо:

WSGIPassAuthorization On

добавить его к вашему httpd.conf

Подробнее там .

0 голосов
/ 18 декабря 2018

Вы можете попробовать изменить Token на Bearer в теле запроса.

Таким образом, оно должно выглядеть следующим образом:

Bearer <token>

...