Check_password not verifying database stored password successfully
Я использую Python 3.9.7 и DJango 3.2.7
Подробности выпуска
Для проверки введенного пароля используется следующий код.
Я могу подтвердить, что отправленный пароль имеет действительное значение и user.password
это хэшированный пароль, хранящийся в базе данных.
passwordCheckResult = check_password(request.POST.get("password"), user.password)
print(passwordCheckResult)
Почему он всегда возвращает None?
Что я искал до сих пор
Django check_password() всегда возвращает False но это не решает мою проблему
Мне интересно, почему код ниже работает, а выше нет...
hashed = make_password("123")
check_password("123", hashed) //this returns True
Почему не использовать напрямую User check_password ?
пример:
user.check_password(request.POST.get("password"))
Здесь user - ваш экземпляр User
Редактирование 1:
Предположу, что request.POST.get("password") возвращает реальное значение, попробуйте зачистить значение следующим образом:
check_password(request.POST.get("password").strip(), user.password.password)
если request.POST.get("password") возвращает None, проверьте, есть ли у входных данных правильный атрибут name="password"
Хешированный пароль:
pbkdf2_sha256$260000$Y0LeK0HJ90YPrj5lOijV20$oFRLMk
max_length=50
слишком короткий, что приводит к обрыву хэша.
Измените его на 128
, как в Django AbstractBaseUser.password.
class tblusers(models.Model):
user_id = BigAutoField(primary_key=True)
# password = CharField(max_length=50, null=False) # Change this
password = CharField(max_length=128, null=False) # to this
created_at = DateTimeField(auto_now_add=True, blank=True)