2017-09-15 114 views
2

我正在使用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

回答

1

更新機型部分需要在創建串行對象時,如下使用partial屬性。

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

錯誤消息絕對不是從restframework,智威湯遜庫,因爲這將是一個消息一起的Invalid username/password.

相關問題