django-restframework-jwt使用JWT令牌时要求输入用户名/密码

django-restframework-jwt使用JWT令牌时要求输入用户名/密码

问题描述:

我正在使用Django rest框架-JWT进行身份验证来处理受保护的url,我试图通过使用IsAutchinted类来保护UserDetail视图但是每次我试图发送生成的令牌我得到如下回应django-restframework-jwt使用JWT令牌时要求输入用户名/密码

{ 
"username": [ 
    "This field is required." 
], 
"password": [ 
    "This field is required." 
] 
} 

我已经包含了Authorization头,正如我在我的头前缀为“智威汤逊”

curl -H "Authorization: JWT <token>" -X PUT http://localhost:8000/user/3/ -d '{"first_name":"curl_test"}' 

的已设置获取JWT令牌,刷新,确认ls工作正常并且生成链接,我只是无法让JWT使用令牌来验证用户名和密码,而不是用户名和密码。

这里是我的用户信息

class UserDetail(APIView): 
    permission_classes = (IsOwner, IsAuthenticated) 
    """ 
    Retrieve, update or delete a user instance. 
    """ 

    def get_object(self, pk): 
     try: 
      return User.objects.get(pk=pk) 
     except User.DoesNotExist: 
      raise Http404 


    def get(self, request, pk, format=None): 
     user = self.get_object(pk) 
     serializer = UserSerializer(user) 
     return Response(serializer.data) 

    def put(self, request, pk, format=None): 
     user = self.get_object(pk) 
     serializer = UserSerializer(user, data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      user = Profile.objects.get(id=pk) 
      user.profile.updated = timezone.now() 
      user.save() 
      return Response(serializer.data, status=status.HTTP_200_OK) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

    def delete(self, request, pk, format=None): 
     user = self.get_object(pk) 
     user.delete() 
     return Response(status=status.HTTP_204_NO_CONTENT) 

我在做什么错误的观点?为什么即使令牌包含在头文件中,它仍然要求输入用户名和密码?

是我在做IsAutchinted类的方式是否正确?或者这可能是JWT不工作的原因,因为我正在使用rest框架权限类?

更新:我的settings.py

REST_FRAMEWORK = { 

    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
     'rest_framework.authentication.BasicAuthentication', 
     'rest_framework.authentication.SessionAuthentication', 

    ), 
    'DEFAULT_PARSER_CLASSES': (
     'rest_framework.parsers.FormParser', 
     'rest_framework.parsers.MultiPartParser', 
     'rest_framework.parsers.JSONParser', 

    ) 
} 
+0

行你怎么配置Django的设置休息框架?尤其是'DEFAULT_AUTHENTICATION_CLASSES'选项。 – hoefling

+0

我已添加到我的问题,请看看。 – Abdul

+0

有趣 - 你可以用'JSONWebTokenAuthentication'测试吗?为测试目的简单评论'BasicAuthentication'和'SessionAuthentication',你能访问页面吗? – hoefling

更新机型部分需要在创建串行对象时,如下使用partial属性。

serializer = UserSerializer(user, data=request.data, partial=True) 

错误消息绝对不是从restframework,智威汤逊库,因为这将是一个消息一起的Invalid username/password.