【问题标题】:check_password not verifying database stored password successfullycheck_password 未成功验证数据库存储的密码
【发布时间】:2021-09-23 14:38:00
【问题描述】:

我正在使用 Python 3.9.7 和 Django 3.2.7。

问题详情

以下代码用于验证提交的密码。

我可以确认提交的密码具有有效值,并且user.password 是存储在数据库中的哈希密码。

passwordCheckResult = check_password(request.POST.get("password"), user.password)
print(passwordCheckResult)

为什么总是返回 False?

哈希密码:pbkdf2_sha256$260000$Y0LeK0HJ90YPrj5lOijV20$oFRLMk
纯密码:123

到目前为止我搜索的内容

Django check_password() always returning False 但这并不能解决我的问题。

下面的代码有效,但上面的代码无效。

hashed = make_password("123")
check_password("123", hashed)  # This returns True

型号

class tblusers(models.Model):
    user_id = BigAutoField(primary_key=True)
    password = CharField(max_length=50, null=False)
    created_at = DateTimeField(auto_now_add=True, blank=True)

【问题讨论】:

    标签: python django python-3.9 django-3.2


    【解决方案1】:

    散列密码:pbkdf2_sha256$260000$Y0LeK0HJ90YPrj5lOijV20$oFRLMk

    max_length=50太短,导致hash被截断。

    把它改成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)
    

    【讨论】:

      【解决方案2】:

      为什么不直接使用用户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"

      【讨论】:

      • 我正在使用自定义的身份验证方法。所以,就我而言,用户实例不存在。
      • 如果用户不存在,那么这一行user.password的值是多少? passwordCheckResult = check_password(request.POST.get("password"), user.password)
      • 检查编辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2012-04-07
      • 1970-01-01
      • 2021-06-17
      相关资源
      最近更新 更多