認証に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は完全に、働いているが、私は置くとき私はユーザー名/パスワードを取得する最新のトークンは必須フィールドです。
あなたのユーザーシリアライザは、すべてのフィールドのデータを強制され
は 'patch'方法 –
同じエラーを使用するようにしてください。 JWTは、私はユーザー名とパスワードを入れて、ヘッダにトークンを無視しなければならないと言います。 – Abdul
あなたがサーバーに送るデータのjsonを追加します。 –