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)
Вернуться на верх