未提供身份验证凭据 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 期望授权 header 以 token 作为其价值。 所以每次调用 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的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest Framework JWT 未提供身份验证凭据
POST 请求的身份验证错误:“未提供身份验证凭据”使用 Axios,但使用 POSTMAN 工作