Django DRF - Невозможно изменить пароль пользователя, так как пользователь при запросе - None
В моем приложении есть конечная точка для изменения пароля пользователя с помощью Django rest framework (DRF). В настоящее время я сталкиваюсь со следующей ошибкой при попытке изменить пароль пользователя:
File "/App/App_API/serializers.py", line 32, in validate_old_password
if not user.check_password(value):
AttributeError: 'NoneType' object has no attribute 'check_password'
[1
urls.py
re_path(r'^api/v1/user/change_password$', API_Views.change_password, name='api_change_password'),
views.py
@api_view(['GET', 'POST'])
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([IsAuthenticated])
def change_password(request):
if request.method == 'POST':
serializer = ChangePasswordSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
# if using drf auth_token, create a new token
if hasattr(user, 'auth_token'):
user.auth_token.delete()
token, created = Token.objects.get_or_create(user=user)
# return new token
return Response({'token': token.key}, status=status.HTTP_200_OK)
serializers.py
class ChangePasswordSerializer(serializers.Serializer):
old_password = serializers.CharField(max_length=128, write_only=True, required=True)
new_password1 = serializers.CharField(max_length=128, write_only=True, required=True)
new_password2 = serializers.CharField(max_length=128, write_only=True, required=True)
def validate_old_password(self, value):
user = None
request = self.context.get("request")
if request and hasattr(request, "user"):
user = request.user
if not user.check_password(value):
raise serializers.ValidationError(
_('Your old password was entered incorrectly. Please enter it again.')
)
return value
def validate(self, data):
if data['new_password1'] != data['new_password2']:
raise serializers.ValidationError({'new_password2': _("The two password fields didn't match.")})
password_validation.validate_password(data['new_password1'], self.context['request'].user)
return data
def save(self, **kwargs):
password = self.validated_data['new_password1']
user = self.context['request'].user
user.set_password(password)
user.save()
return user
Мне кажется, что объект пользователя в сериализации просто = None. Это снова приводит к вопросу, почему пользователь не присутствует в запросе? Любая идея
Заранее спасибо