@ -42,7 +42,7 @@ class UserProfileSerializer(serializers.ModelSerializer):
class UserRegisterSerializer ( serializers . ModelSerializer ) :
fcm = serializers . CharField ( required = False , allow_blank = True , allow_null = True )
device_id = serializers . CharField ( required = False , allow_blank = True , allow_null = True )
device_id = serializers . CharField ( required = False , allow_blank = True , allow_null = True , write_only = True )
email = serializers . EmailField ( )
class Meta :
@ -52,11 +52,20 @@ class UserRegisterSerializer(serializers.ModelSerializer):
' fullname ' : { ' required ' : True , } ,
' email ' : { ' required ' : True , } ,
}
def create ( self , validated_data ) :
device_id = validated_data . pop ( ' device_id ' , None )
user = super ( ) . create ( validated_data )
if device_id :
user . device_id = device_id
user . save ( )
return user
def validate_email ( self , value ) :
if User . objects . filter ( email = value ) . exists ( ) :
normalized_email = User . objects . normalize_email ( value )
if User . objects . filter ( email = normalized_email ) . exists ( ) :
raise serializers . ValidationError ( " This email is already registered. " )
return value
return normalized_email
@ -65,7 +74,12 @@ class UserVerifySerializer(serializers.Serializer):
email = serializers . EmailField ( )
device_id = serializers . CharField ( max_length = 255 , required = False )
def validate_email ( self , value ) :
"""
Normalize the email to ensure the Redis key matches correctly .
"""
return User . objects . normalize_email ( value )
class UserLoginSerializer ( serializers . Serializer ) :
password = serializers . CharField ( write_only = True )
@ -83,6 +97,12 @@ class UserLoginSerializer(serializers.Serializer):
# data.pop('fcm', None)
# data.pop('device_id', None)
return data
def validate_email ( self , value ) :
"""
Normalize email for case - insensitive login .
"""
return User . objects . normalize_email ( value )
# class UserLoginSerializer(serializers.Serializer):
# password = serializers.CharField(write_only=True)
@ -98,17 +118,29 @@ class UserLoginSerializer(serializers.Serializer):
class UserRecoverPasswordSerializer ( serializers . ModelSerializer ) :
email = serializers . EmailField ( )
# class UserRecoverPasswordSerializer(serializers.ModelSerializer) :
# email = serializers.EmailField( )
class Meta :
model = User
fields = [ ' email ' , ]
extra_kwargs = {
' email ' : { ' required ' : True , } ,
}
# class Meta:
# model = User
# fields = ['email',]
# extra_kwargs = {
# 'email': {'required': True,},
# }
class UserRecoverPasswordSerializer ( serializers . Serializer ) :
"""
Validates that an email is provided and is in a valid format
without checking for database uniqueness .
"""
email = serializers . EmailField ( required = True )
def validate_email ( self , value ) :
"""
Normalize the email address to ensure case - insensitive lookups .
"""
return User . objects . normalize_email ( value )
class UserResetPasswordSerializer ( serializers . ModelSerializer ) :
password = serializers . CharField ( write_only = True )