added field old_password to endpoint for change user password

This commit is contained in:
Anatoly 2019-09-20 16:08:23 +03:00
parent 1e1b09660d
commit 277c7ba2eb

View File

@ -1,5 +1,6 @@
"""Common account serializers"""
from django.conf import settings
from django.utils.translation import gettext_lazy as _
from django.contrib.auth import password_validation as password_validators
from fcm_django.models import FCMDevice
from rest_framework import exceptions
@ -80,23 +81,31 @@ class ChangePasswordSerializer(serializers.ModelSerializer):
"""Serializer for model User."""
password = serializers.CharField(write_only=True)
old_password = serializers.CharField(write_only=True)
class Meta:
"""Meta class"""
model = models.User
fields = ('password', )
fields = (
'password',
'old_password',
)
def validate(self, attrs):
"""Override validate method"""
password = attrs.get('password')
old_password = attrs.get('old_password')
try:
# Check old password
if not self.instance.check_password(raw_password=old_password):
raise serializers.ValidationError(_('Old password mismatch.'))
# Compare new password with the old ones
if self.instance.check_password(raw_password=password):
raise utils_exceptions.PasswordsAreEqual()
raise serializers.ValidationError(_('Password is already in use'))
# Validate password
password_validators.validate_password(password=password)
except serializers.ValidationError as e:
raise serializers.ValidationError(str(e))
raise serializers.ValidationError({'detail': e.detail})
else:
return attrs