Closed staydecent closed 4 years ago
I think we generally have a standard on the front-end to expect an access token and a userId to be returned after signup (so the user doesn't have to login right after sign up).
This is what I use:
class UserCreateSerializer(serializers.Serializer): user_id = serializers.IntegerField(read_only=True) token = serializers.CharField(read_only=True) email = serializers.EmailField(write_only=True) password = serializers.CharField(write_only=True) def create(self, validated_data): password = validated_data.pop('password') validated_data['email'] = validated_data['email'].lower() try: user = get_user_model().objects.get(email=validated_data['email']) if user.password or user.has_usable_password(): raise ValidationError({ 'non_field_errors': 'An account with email {} already exists.'.format(validated_data['email']) }) else: user.set_password(password) user.save() except get_user_model().DoesNotExist: user = get_user_model()(**validated_data) user.set_password(password) user.save() Mail.send(settings.MAIL_NEW_ACCOUNT, user, {'email': 'john@example.com'}) (token, _) = Token.objects.get_or_create(user=user) return {'token': token.key, 'user_id': user.id}
I think we generally have a standard on the front-end to expect an access token and a userId to be returned after signup (so the user doesn't have to login right after sign up).
This is what I use: