Django Rest Framework - 未提供身份验证凭据

新手上路,请多包涵

我正在使用 Django Rest Framework 开发 API。我正在尝试列出或创建一个“订单”对象,但是当我尝试访问控制台时出现此错误:

 {"detail": "Authentication credentials were not provided."}

意见:

 from django.shortcuts import render
from rest_framework import viewsets
from django.contrib.auth.models import User
from rest_framework.renderers import JSONRenderer, YAMLRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from order.models import *
from API.serializers import *
from rest_framework.permissions import IsAuthenticated

class OrderViewSet(viewsets.ModelViewSet):
    model = Order
    serializer_class = OrderSerializer
    permission_classes = (IsAuthenticated,)

序列化器:

 class OrderSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Order
        fields = ('field1', 'field2')

还有我的网址:

 # -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib import admin
from django.utils.functional import curry
from django.views.defaults import *
from rest_framework import routers
from API.views import *

admin.autodiscover()

handler500 = "web.views.server_error"
handler404 = "web.views.page_not_found_error"

router = routers.DefaultRouter()
router.register(r'orders', OrdersViewSet)

urlpatterns = patterns('',
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token'),
    url(r'^api/', include(router.urls)),
)

然后我在控制台中使用这个命令:

 curl -X GET http://127.0.0.1:8000/api/orders/ -H 'Authorization: Token 12383dcb52d627eabd39e7e88501e96a2sadc55'

错误说:

 {"detail": "Authentication credentials were not provided."}

原文由 Marcos Aguayo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

通过将“DEFAULT_AUTHENTICATION_CLASSES”添加到我的 settings.py 来解决

REST_FRAMEWORK = {
   'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework.authentication.TokenAuthentication',
   ),
   'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAdminUser'
   ),
}

原文由 Marcos Aguayo 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用 mod_wsgi 在 Apache 上运行 Django,则必须添加

WSGIPassAuthorization On

在你的 httpd.conf 中。否则,授权标头将被删除 mod_wsgi

原文由 Robert Kovac 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题