首页 > 解决方案 > 未提供身份验证凭据 drf

问题描述

当我尝试访问 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

我的意见.py:

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

序列化程序.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 时出现错误

标签: djangopython-3.xdjango-rest-framework

解决方案


如果您使用的是TokenAuthentication ,则无法从浏览器 url 访问 api 。正如@DarkOrb TokenAuthentication 所说,需要一个带有令牌的授权标头作为它的值。因此,每当您调用api时,您都必须传递令牌您可以使用postman测试您的 api 。

在此处输入图像描述

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


推荐阅读