使用 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源码解析