未提供身份验证凭据 drf

Posted

技术标签:

【中文标题】未提供身份验证凭据 drf【英文标题】:Authentication credentials were not provided drf 【发布时间】:2020-01-11 12:41:26 【问题描述】:

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

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 时出现错误

【问题讨论】:

你能显示serializer class 我在编辑中添加了这一点 【参考方案1】:

如果您使用 TokenAuthentication,则无法从浏览器 url 访问 api。 正如 @DarkOrb 所说,TokenAuthentication 期望授权 headertoken 作为其价值。 所以每次调用 api 时都必须传递 token。 您可以使用 postman 测试您的 api。

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

【讨论】:

【参考方案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,您必须有 @ 987654324@ 已启用。

【讨论】:

@afk 你登录了吗?理想情况下,使用此代码,您应该能够在邮递员和浏览器中使用 API。此外,顺序很重要,首先进行会话身份验证会给你邮递员的 csrf 问题。 你做错了什么?重要的是要知道它为什么不起作用以及是什么使它起作用。

以上是关于未提供身份验证凭据 drf的主要内容,如果未能解决你的问题,请参考以下文章

DRF:“详细信息”:“未提供身份验证凭据。”

DRF 总是返回“未提供身份验证凭据”

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

POST 请求的身份验证错误:“未提供身份验证凭据”使用 Axios,但使用 POSTMAN 工作

djangorestframework-jwt 未提供身份验证凭据

未提供 Angular + Django REST 身份验证凭据