Django Rest框架身份验证错误

我正在制作一个角色应用程序,使用rest api在django网站中进行身份验证。 在drf文档中,他们声明拒绝的用户认证将导致两个错误,HTTP 401和HTTP 403,如下所示:

当未经身份验证的请求被拒绝时,有两种不同的错误代码可能是合适的。

  • HTTP 401未经授权
  • HTTP 403权限被拒绝
  • 无论何时,当我尝试使用某些虚拟数据进行身份验证时,这是错误的,我得到错误响应HTTP 400和non_field_errors 。 这里有什么问题?

    首先,我使用用户名和密码进行简单身份验证,这样做是为了获取用户令牌,这将用于网站中的其他操作。

    我正在使用一种方法来获得一个exh auth令牌,你可以在下面看到它:

    class ObtainExperingAuthToken(ObtainAuthToken):def post(self,request,* args,** kargs):serializer = self.serializer_class(data = request.data)

        if serializer.is_valid():
            print serializer
            user = UserProfile.objects.get(email=serializer.data['username'])
            token, created = Token.objects.get_or_create(user=user)
    
            utc_now = timezone.now()
            if not created and token.created < utc_now - datetime.timedelta(hours=24):
                token.delete()
                print serializer.data
                token = Token.objects.create(user=serializer.data['user'])
                token.created = datetime.datetime.utcnow()
                token.save()
    
            groups = [group.name for group in user.groups.all()]
            response_data = {
                'email': user.email,
                'token': token.key,
                'groups': groups
            }
    
            return HttpResponse(json.dumps(response_data), content_type='application/json')
        return HttpResponse(serializer.errors, status=400)
    

    @Edit为值REST_FRAMEWORK

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
        ],
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.SessionAuthentication',
            'accounts.authentication.ExpiringTokenAuthentication',
        ],
        'DEFAULT_PARSER_CLASSES': [
            'rest_framework.parsers.JSONParser',
            'rest_framework.parsers.FormParser',
            'rest_framework.parsers.MultiPartParser',
            'rest_framework.parsers.FileUploadParser'
        ]
    }
    

    首先,尽管从你的解释中不太清楚,但我猜你在负责提供用户访问令牌的api中收到400错误。 因为显然这个api上没有认证(除了客户端认证可能),所以你真的会得到错误的请求错误,因为你提供自己提及的无效数据。 当您访问不允许未经身份验证的访问的api时会出现身份验证错误,实际上提供身份验证令牌的api应该不是这种情况。

    其次,要获取认证错误,您需要将认证类添加到REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES']或视图类的AUTHENTICATION_CLASSES变量。

    链接地址: http://www.djcxy.com/p/33775.html

    上一篇: Django Rest Framework Authentication Errors

    下一篇: token authentication logout