Django user.checkpassword всегда возвращает `FALSE`
Я использую пользовательский аутентификатор в моем Django приложении, и пытаюсь войти в систему с помощью API, но когда я использую check_password, он всегда выдает мне false, даже если это правильный пароль, вот мой код:
Модель пользователя
class CustomUserManager(BaseUserManager):
def create_user(self, phone, password=None):
if not phone:
raise ValueError('Users must have a phone number')
user = self.model(
phone=phone,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, phone, password):
user = self.create_user(
phone,
password=password,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.user_type = 'admin'
user.save(using=self._db)
return user
class CustomUser(AbstractUser):
user_type_choices = (
('client', 'Client'),
('supplier', 'Supplier'),
('admin', 'Admin'),
)
username=None
phone = models.CharField(max_length=200, unique=True,verbose_name=_("Phone"),help_text=_("Phone number of the user"))
user_type = models.CharField(max_length=200, choices=user_type_choices,verbose_name=_("Type"),help_text=_("Type of the user"),default='client')
company_name = models.CharField(max_length=200,verbose_name=_("Company Name"),help_text=_("Company name of the supplier"),blank=True,null=True)
email = models.EmailField(max_length=200,verbose_name=_("Email"),help_text=_("Email of the supplier"),blank=True,null=True)
establishment_date = models.DateField(verbose_name=_("Establishment Date"),help_text=_("Establishment date of the supplier's company"),blank=True,null=True)
number_of_projects = models.IntegerField(verbose_name=_("Number of projects"),help_text=_("Number of projects the supplier has"),blank=True,null=True)
tax_id = models.FileField(upload_to='media/tax_id',verbose_name=_("Tax ID"),help_text=_("Tax ID of the supplier"),blank=True,null=True)
logo = models.FileField(upload_to='media/logo',verbose_name=_("Logo"),help_text=_("Logo of the supplier"),blank=True,null=True)
business_register = models.FileField(upload_to='media/business_register',verbose_name=_("Business Register"),help_text=_("Business register of the supplier"),blank=True,null=True)
about_company = models.TextField(verbose_name=_("About Company"),help_text=_("About company of the supplier"),blank=True,null=True)
USERNAME_FIELD = 'phone'
REQUIRED_FIELDS = []
objects = CustomUserManager()
class Meta:
verbose_name = _("User")
verbose_name_plural = _("Users")
А вот код, в котором я пытаюсь проверить пароль :
class LoginViewSet(viewsets.ViewSet):
"""
Checks phone and password and returns an auth token
"""
def create(self, request):
"""
Checks phone and password and returns an auth token
"""
lang = request.META.get('HTTP_LANG', 'ar')
if CustomUser.objects.filter(phone=request.data['phone']).exists():
user = CustomUser.objects.get(phone=request.data['phone'])
if user.check_password(request.data['password']):
token, created = Token.objects.get_or_create(user=user)
return Response({'success': True, 'token': token.key, 'user': CustomUserSerializer(user).data, "message": 'تم تسجيل الدخول بنجاح' if lang == 'ar' else 'Login Successfully'})
else:
return Response({'success': False, 'message': 'كلمة المرور غير صحيحة' if lang == 'ar' else 'Wrong Password'})
else:
return Response({'success': False, 'message': 'هذا الرقم غير مسجل' if lang == 'ar' else 'This number is not registered'})
в этой строке возникает проблема if user.check_password(request.data['password']):, так как она всегда False