Django rest framework 权限类已验证,无法在DRF中工作

Django rest framework 权限类已验证,无法在DRF中工作,django-rest-framework,django-authentication,django-serializer,auth-token,Django Rest Framework,Django Authentication,Django Serializer,Auth Token,我已经使用了令牌身份验证,它工作正常,即它正在验证用户,然后用户登录。但是在我的视图中,我为其中一个视图将权限类设置为IsAuthenticated,即使用户是经过身份验证的用户,也不允许对其进行身份验证。 下面是显示我已登录的屏幕截图(jadhav@gmail.com): 下一个标签上写着“未提供认证详细信息”: 有人能告诉我出了什么事吗? 好的,我将提供详细信息: 以下是我的设置: REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSE

我已经使用了令牌身份验证,它工作正常,即它正在验证用户,然后用户登录。但是在我的视图中,我为其中一个视图将权限类设置为IsAuthenticated,即使用户是经过身份验证的用户,也不允许对其进行身份验证。 下面是显示我已登录的屏幕截图(jadhav@gmail.com):

下一个标签上写着“未提供认证详细信息”:

有人能告诉我出了什么事吗? 好的,我将提供详细信息: 以下是我的设置:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated', )
}
我就是这样认证的:

类UserLoginAPIView(APIView):

我设置限制的另一个视图:

类BoardCreateAPIView(CreateAPIView):


在django rest框架中,您应该在请求头中提供令牌。下面是使用curl命令的示例:

curl -X POST -H "Content-Type: application/json" -H "Authorization: Token <MY_TOKEN>" http://my-api-url

如需更多了解请阅读此

正如@Reza所暗示的,您错过了令牌身份验证的要点。您正在尝试改用基本身份验证流。流程如下:

  • 客户端使用登录名和密码从服务器请求令牌
  • 服务器验证您的凭据是否正确,创建令牌并将其返回给客户端
  • 在后续请求中,客户端将令牌添加到Auth头,如下所示:

    授权:令牌

  • 因此,您应该在登录视图中验证用户凭据并创建令牌。您不应该尝试自己执行身份验证。您可以将视图重命名为
    acquire\u token
    ,以免混淆其功能


    查看文章@Reza linked了解更多信息。

    我认为内置api文档不允许发布帖子?我可能错了。检查浏览器开发工具,确保您确实发送了带有令牌的帖子。也就是说,您应该添加有关如何添加权限类以及如何添加令牌的更多信息。此外,身份验证所需的头是
    授权
    ,因此,请确保您的令牌在那里,您可以使用Postman在上设置身份验证header@Jason编辑以提供更多信息info@MohammadAli试图提供更多信息,现在你可以告诉我哪里搞砸了。我试图提供更多信息。你能检查一下吗?你读过这篇文章了吗?还是通过我提供的令牌头发送的?只需获取令牌,然后通过
    Authorization:token
    标题集向您的Url发送一个请求,并对其具有权限。
    queryset = Boards.objects.all()
    serializer_class = BoardCreateSerializer
    permission_classes = (IsAuthenticated,)
    
    curl -X POST -H "Content-Type: application/json" -H "Authorization: Token <MY_TOKEN>" http://my-api-url
    
    REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
    }