使用 Postman 进行 Django Rest Framework 令牌身份验证

Posted

技术标签:

【中文标题】使用 Postman 进行 Django Rest Framework 令牌身份验证【英文标题】:Django Rest Framework Token Authentication with Postman 【发布时间】:2019-05-18 15:30:55 【问题描述】:

我正在尝试使用 Postman 来测试我的 DRF 端点,但我总是收到 Authentication credentials were not provided. 错误。端点工作正常,但我还没有找到如何从 Postman 发送请求。

我能够为用户获取令牌:

但是当我尝试使用令牌发送请求时,总是会收到错误消息:

我将授权类型设置为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'

【问题讨论】:

""我将授权类型设置为从父级继承身份验证。"" 在 POSTMAN 中将其更改为 No Auth @JPG 我得到同样的错误 我发现返回错误的是带有 Apache 的远程服务器。本地主机向 Postman 请求返回成功。 使用什么HTTP服务器? 【参考方案1】:

您可以尝试在请求正文中将Token 更改为Bearer

所以,它应该是这样的:

Bearer <token>

【讨论】:

【参考方案2】:

就您使用 Apache 而言,您需要:

WSGIPassAuthorization On

将其添加到您的httpd.conf

更多详情there.

【讨论】:

在Ubuntu中,要修改的文件是apache2.conf【参考方案3】:

添加标题:

Cookie sessionid=token

【讨论】:

以上是关于使用 Postman 进行 Django Rest Framework 令牌身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Postman 表单数据在 Django REST Framework 中发布嵌套数组?

即使在创建帖子期间使用 Postman 将文件上传到该字段后,Django Rest Framework 仍显示字段错误

django-rest framework 接口规范 原生django接口单查群查 postman工具 CBV源码解析

如何从 django rest 框架访问 jwt 令牌到 Angular 前端

如何在Chrome下使用Postman进行rest请求测试

使用 Postman REST/RESTFUL 工具进行负载测试