check_password 未成功验证数据库存储的密码
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)
为什么总是return错误?
哈希密码:pbkdf2_sha2560000$Y0LeK0HJ90YPrj5lOijV20$oFRLMk
普通密码:123
到目前为止我搜索了什么
但这并不能解决我的问题。
下面的代码有效,但上面的代码无效。
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)
为什么不直接使用用户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 ="密码"
Hashed password: pbkdf2_sha2560000$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)
我正在使用 Python 3.9.7 和 Django 3.2.7。
问题详情
以下代码用于验证提交的密码。
我可以确认提交的密码具有有效值,user.password
是存储在数据库中的散列密码。
passwordCheckResult = check_password(request.POST.get("password"), user.password)
print(passwordCheckResult)
为什么总是return错误?
哈希密码:pbkdf2_sha2560000$Y0LeK0HJ90YPrj5lOijV20$oFRLMk
普通密码:123
到目前为止我搜索了什么
下面的代码有效,但上面的代码无效。
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)
为什么不直接使用用户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 ="密码"
Hashed password:
pbkdf2_sha2560000$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)