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.
attrs[‘users’] = user
The key needs to be user
, not users
.