Authenticate return none для пользовательской модели пользователя django rest framework
Я пытаюсь использовать электронную почту вместо имени пользователя для входа в систему в django-rest-framework. но authenticate(request, email=email, password=password) всегда возвращает None. Я пробовал много способов, но всегда возвращается None. кто-нибудь может помочь мне решить эту проблему?
Модель
class CustomUser(BaseUserManager):
def create_superuser(self,user_name, email, phone, password,**other_fields):
other_fields.setdefault('is_superuser', True)
other_fields.setdefault('is_staff', True)
other_fields.setdefault('is_active', True)
if other_fields.get('is_staff') is not True:
raise ValueError('Superuser must be assigned to is_staff=True')
if other_fields.get('is_superuser') is not True:
raise ValueError('Superuser must be assigned to is_superuser=True')
return self.create_user(user_name, email, phone, password, **other_fields)
def create_user(self, user_name, email, phone, password, **other_fields):
if not email:
raise ValueError(gettext_lazy('Email is required'))
other_fields.setdefault('is_active', True)
email = self.normalize_email(email)
user = self.model(user_name=user_name, email=email, phone=phone, **other_fields)
user.set_password(password)
user.save()
return user
class Profile(AbstractBaseUser, PermissionsMixin):
user_name = models.CharField(unique=True, max_length=255)
email = models.EmailField(gettext_lazy('email address'), unique=True)
password = models.CharField(null=False, max_length=2000)
phone = models.CharField(max_length=30)
register_date = models.DateTimeField(default=timezone.now)
is_varified = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects = CustomUser()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['user_name', 'phone']
сериализатор
class RegisterSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['email', 'user_name', 'password','phone']
extra_kwargs = {
'password': {'write_only': True}
}
Вид
class RegisterView(APIView):
def post(self, request):
serializer = RegisterSerializer(data= request.data)
if serializer.is_valid():
serializer.save()
email = serializer.data.get('email')
password = serializer.data.get('password')
user = authenticate(request, email=email, password=password)
print(user, email, password)
# login(request, request.data)
return Response(serializer.data)
return Response("error")
settings
AUTH_USER_MODEL = 'myapp.Profile'
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)