J'essaie de mettre à jour le champ first_name pour un utilisateur utilisant un jeton JWT pour l'authentification, pour une raison quelconque lorsque je le fais dans une autre table où il n'y a pas de champ nom d'utilisateur et mot de passe. facilement le faire et mettre à jour les détails en utilisant le jeton JWT. Mais quand je le fais dans la table par défaut du modèle utilisateur Django, il me demande toujours d'inclure le nom d'utilisateur et le mot de passe sur la requête (même si je ne veux pas les mettre à jour). voici l'erreur que je reçois lors de l'envoi de la demande à l'aide postierAuthentification Django JWT avec demande PUT
{
"username": [
"This field is required."
],
"password": [
"This field is required."
]
}
même si je l'en-tête d'autorisation mis en droit et il fonctionne avec toute autre demande, mais pas lors de la mise à jour les informations utilisateur, j'ai inclus tout le nécessaire et les classes d'authentification par défaut. toute aide est appréciée, essayant de résoudre cette petite chose depuis 4 jours maintenant.
commande boucle ne fonctionne pas
curl -H "Authorization: JWT <token>" -X PUT http://localhost:8000/user/3/ -d '{"first_name":"curl_test"}'
commande curl travail
curl -H "Authorization: JWT <token>" -X GET http://localhost:8000/user/3/
AVIS LA méthode. mon views.py (UserDetails classe)
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)
mon 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 travaille pleinement, lors de l'envoi d'un ancien jeton sur la demande que je reçois Signature a expiré, mais quand je mets le dernier jeton que j'obtiens le nom d'utilisateur/mots de passe sont des champs obligatoires.
essayer d'utiliser la méthode 'patch' de –
d'erreur même. JWT dit que je dois inclure le nom d'utilisateur et le mot de passe et ignorer le jeton sur l'en-tête – Abdul
ajouter json des données que vous envoyez au serveur, –