Я пытаюсь обновить поле first_name для пользователя, использующего токен JWT для аутентификации, по какой-то причине, когда я делаю это в другой таблице, где нет поля имени пользователя и пароля, я могу легко сделать это и обновить детали с помощью JWT токен. Но когда я делаю это в таблице по умолчанию для модели пользователя Django, он продолжает просить меня включить имя пользователя и пароль в запрос (даже подумал, что я не хочу их обновлять). вот ошибка, которую я получаю при отправке запроса с помощью почтальона
{
"username": [
"This field is required."
],
"password": [
"This field is required."
]
}
Несмотря на то, что у меня правильно установлен заголовок авторизации, и он работает с любым другим запросом, но не при обновлении сведений о пользователе, я включил все необходимые классы аутентификации и классы аутентификации по умолчанию. любая помощь приветствуется, уже 4 дня пытаюсь решить эту мелочь.
команда curl не работает
curl -H "Authorization: JWT <token>" -X PUT http://localhost:8000/user/3/ -d '{"first_name":"curl_test"}'
Команда curl работает
curl -H "Authorization: JWT <token>" -X GET http://localhost:8000/user/3/
ЗАМЕТИТЕ ДРУГОЙ метод. мой 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 полностью работает, при отправке старого токена по запросу, который я получаю, срок действия подписи истек, но когда я помещаю последний токен, я получаю имя пользователя / пароли - обязательные поля.
UserSerializer
? Трассировки стека? 18.09.2017