from rest_framework import serializers from accounts.models import CustomUser from django.contrib.auth import authenticate class CustomUserSerializer(serializers.ModelSerializer): class Meta: model = CustomUser fields = ('id', 'username', 'email') class UserRegistrationSerializer(serializers.ModelSerializer): password1 = serializers.CharField(write_only=True) password2 = serializers.CharField(write_only=True) class Meta: model = CustomUser fields = ('id', 'username', 'password1', 'password2', 'email') extra_kwargs = {'password': {'write_only': True}} def validate(self, attrs): if attrs['password1'] != attrs['password2']: raise serializers.ValidationError("Passwords must match") password = attrs.get('password1', '') if len(password) < 8: raise serializers.ValidationError( "Passwords must be at least 8 characters") return attrs def create(self, validated_data): password = validated_data.pop('password1') validated_data.pop('password2') return CustomUser.objects.create_user( password=password, **validated_data) # user = RegisteredUser(**validated_data) # user = set_password(validated_data['password']) # user.save() # return user class UserLoginSerializer(serializers.ModelSerializer): email = serializers.CharField() password = serializers.CharField() class Meta: model = CustomUser fields = ('email', 'password',) def validate(self, data): user = authenticate(**data) if user and user.is_active: return user raise serializers.ValidationError("Credential Error")