Search code examples
djangodjango-rest-frameworkdjango-rest-auth

django Restframework _ override rest_auth LoginView


I'm trying to override the rest_auth LoginView with my own LoginSerializer.

class LoginSerializer(serializers.ModelSerializer):
    """Login Serialization for first_token"""
    first_token = serializers.CharField(write_only=True)
    phonenumber = serializers.CharField(write_only=True)

    class Meta:
        model = User
        fields = ['phonenumber', 'first_token']

    def _validate_phonenumber(self, phonenumber, first_token):
        user = None
        if phonenumber and first_token:
            user = authenticate(phonenumber=phonenumber, first_token=first_token)
        else:
            raise exceptions.ValidationError('phonenumber does not exist')
        return user

    def validate(self, attrs):
        first_token = attrs.get('first_token')
        phonenumber = attrs.get('phonenumber')
        user = self._validate_phonenumber(phonenumber, first_token)
        attrs['users'] = user
        return attrs

settings.py

REST_AUTH_SERIALIZERS = {
    'LOGIN_SERIALIZER': 'blog.serializers.LoginSerializer',
}

when im trying to login errors comes up:

KeyError at /api/login/ 'user'

workspace/test-blog/env/lib/python3.6/site-packages/rest_auth/views.py in login self.user = self.serializer.validated_data['user']

my Usermodel is inheriting from AbstractBaseUser:

class User(AbstractBaseUser):
    username = models.CharField(max_length=20, blank=True)
    email = models.EmailField(verbose_name='email address',blank=True, null=True, max_length=255, unique=True, default=None)
    phonenumber = models.CharField(validators=[phone_regex], max_length=17, null=True, unique=True)
    first_token = models.ForeignKey(FirstToken, on_delete=models.SET_NULL, null=True, related_name='first_token', blank=True)
    active = models.BooleanField(default=True)
    staff = models.BooleanField(default=False)
    admin = models.BooleanField(default=False)
    objects = UserManager()

    USERNAME_FIELD = 'phonenumber'
    REQUIRED_FIELDS = []

I'm stuck. I need some help.


Solution

  • attrs[‘users’] = user
    

    The key needs to be user, not users.