未提供身份验证凭证drf

时间:2019-09-09 18:15:15

标签: django python-3.x django-rest-framework

当我尝试访问api时出现此错误:

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

我已将其包含在settings.py中:

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
    'rest_framework.authentication.TokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',


),
'DEFAULT_PERMISSION_CLASSES':(
    'rest_framework.permissions.IsAuthenticated',
)

}

我的应用api urls.py:

from django.urls import path,include
from . import views
from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'',views.UserViewSet, 'user_list')
urlpatterns = router.urls

我的views.py:

class UserViewSet(viewsets.ModelViewSet):
       queryset = User.object.all()
       serializer_class = serializers.UserSerializers

serializers.py:

from rest_framework import serializers
from users.models import User


class UserSerializers(serializers.ModelSerializer):
  class Meta:
    model = User
    fields = ('email','password')

我的主要urls.py:

urlpatterns = [
path('admin/', admin.site.urls),
path('',include(urls)),
path ('', include(user_urls)),
path('api/',include(api_urls)),

当我运行localhost:8000 / api时出现错误

2 个答案:

答案 0 :(得分:2)

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

在您的settings.py文件中使用它,发生的情况是rest_framework.authentication.TokenAuthentication期望带有令牌的授权标头作为其值,但是您无法通过浏览器发送该标头,以从浏览器浏览API您必须启用SessionAuthentication

答案 1 :(得分:1)

如果您使用的是 TokenAuthentication ,则无法从浏览器网址访问api。 正如 @DarkOrb 所说,TokenAuthentication期望使用令牌作为其值的授权 header 。 因此,每当调用 api 时,您都必须传递令牌。 您可以使用postman测试api。

enter image description here

在上图中,我已在邮递员的标头中传递令牌以访问我的api。 当您从前端调用api时,将令牌与请求一起传递。 如果只想在桌面浏览器中使用api,则只能使用 SessionAuthentication 。对于移动设备,必须完成 Tokenauthentication