当我尝试令牌身份验证时,Django 返回“未提供身份验证凭据”

问题描述 投票:0回答:1

(我尝试了类似问题的解决方案,但它们对我不起作用)。

我正在创建一个简单的基于 Django REST 的 Web 应用程序,用户将在其中注册、创建一些事件、稍后登录并查看事件。

以下是此次活动的观点:

class EventGetCreate(APIView):
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)

    def get(self, request):
        created_user = request.user
        events = Event.objects.filter(creator=created_user)
        serializer = EventSummary(events, many=True)
        return Response(serializer.data)

其urls.py如下:

from django.urls import path, include

from . import views

app_name = 'event'

urlpatterns = [
    ...
    path('eventviewall/', views.EventGetCreate.as_view()),
]

在 core/urls.py 中,我有这个来获取令牌:

from .views import UserViewSet
from rest_framework.authtoken.views import ObtainAuthToken, obtain_auth_token

app_name = 'core'

router = routers.DefaultRouter()
router.register('users', UserViewSet)

urlpatterns = [
    path('auth/', obtain_auth_token),
    path('register/', include(router.urls)),
]

使用邮递员,我可以成功登录并获取令牌:将请求发送到http://127.0.0.1:8000/api/auth/并获取以下(示例令牌):

{
    "token": "xxyyzz"
}

现在我想做的是在获取请求中发送此令牌,并查看用户创建的事件。 我将请求发送到 http://127.0.0.1:8000/event/eventviewall/,并在授权选项卡 -> 承载令牌中设置上述令牌。

但是,我得到以下回复:

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

现在,如果我在上面的视图中设置permission_classes = ()(正如类似问题中的一些答案所建议的那样),我会收到以下错误:

TypeError at /event/eventviewall/
Field 'id' expected a number but got <django.contrib.auth.models.AnonymousUser object at 0x0000018BEF4573A0>.

我发现出现此错误是因为 Django 将 request.user 设置为 AnonymousUser,因为它无法对用户进行身份验证。

我该如何解决这个问题?

django authentication django-rest-framework token django-authentication
1个回答
0
投票

问题是这不是 Bearer Token。 您应该提供自己的标头

Authorization
以及值
Token: <token>
。 像 Postman 这样的应用程序没有内置这种类型的授权标头,因此您需要手动添加它。

© www.soinside.com 2019 - 2024. All rights reserved.