0

認証にJWTトークンを使用するユーザのfirst_nameフィールドを更新しようとしています。何らかの理由で、ユーザ名とパスワードフィールドがない別のテーブルで何らかの理由で簡単にそれを行い、JWTトークンを使用して詳細を更新します。 しかし、私はDjangoユーザーモデルのデフォルトテーブルでそれを行うとき、要求にユーザー名とパスワードを含めるよう依頼しています(私はそれらを更新したくないと思っています)。ここではなく、ユーザーの詳細情報を更新するとき、私はすべての必要なが含まれている、私は右の設定認証ヘッダーを持っており、それが他のリクエストと連携にもかかわらず、郵便配達PUTリクエスト付きDjango JWT認証

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

を使用して要求を送信するとき、私は取得していますエラーがありますデフォルトの認証クラスです。どのような助けにも感謝しています。今この小さなものを4日間解決しようとしています。

curlコマンドが

curl -H "Authorization: JWT <token>" -X GET http://localhost:8000/user/3/ 

NOTICE別の方法を作業

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

curlコマンドを動作していません。 私は署名の有効期限が切れて取得していますリクエストに応じて、古いトークンを送信するときに、私のviews.py(UserDetailsクラス)​​

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) 

私の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', 

    ) 
} 

JWTは完全に、働いているが、私は置くとき私はユーザー名/パスワードを取得する最新のトークンは必須フィールドです。

あなたのユーザーシリアライザは、すべてのフィールドのデータを強制され
+0

は 'patch'方法 –

+0

同じエラーを使用するようにしてください。 JWTは、私はユーザー名とパスワードを入れて、ヘッダにトークンを無視しなければならないと言います。 – Abdul

+0

あなたがサーバーに送るデータのjsonを追加します。 –

答えて

1

partial updatesを許可するpartial=Trueを使用します。

serializer = UserSerializer(user, data={'username': u'test'}, partial=True) 
+0

私はラップトップを更新したら一度試してみます – Abdul

+0

私はちょうど試しましたが、問題は部分的な更新でも完全なものでもありません。ユーザ名/パスワードのフィールドがなく、PUTリクエストを使用している別のテーブルの同じコードは、JWTでも問題ありません。トークンヘッダーが含まれていても、ユーザー名とパスワードが必要なrest-framework-jwtの問題があるようです。トークンの取得/確認/リフレッシュは問題なく動作します。 – Abdul

+0

返されるエラーが 'UserSerializer'ではなくJWTからのものであることをどう知っていますか?スタックトレース? – vignesh