【问题标题】:Django User.check_password wouldn't pass password checkDjango User.check_password 不会通过密码检查
【发布时间】:2015-08-31 04:42:54
【问题描述】:

尝试编写一个单元测试来检查用户是否输入了正确的密码。

为此使用 Django 的原生身份验证函数 user.check_password

问题是 check_password 出于某种原因不接受 user 对象自己的密码。例如,这会引发错误:

assert user.check_password(user.password), "Password doesn't match"

user.password 返回 MD5 unicode 字符串。

有谁知道这为什么不通过检查以及如何通过检查?

【问题讨论】:

  • 我想你基本上已经回答了你自己的问题。 check_password 采用原始密码而不是已经散列的密码。对于单元测试,您必须插入您的 testuser 的未哈希密码。
  • 看起来像这样。在这个单元测试中为我工作。

标签: python django passwords python-unittest


【解决方案1】:

发生这种情况是因为 check_password 接受一个原始字符串,而您正在向它传递一个哈希值。

assert user.check_password(user.password)  # False because passing hash

assert user.check_password('my_password')  # True because accepts a raw string

user.passwordpassword 的哈希值和元数据。

根据docs

检查密码(原始密码)
如果给定的原始字符串是,则返回 True 用户的正确密码。 (这会处理密码 进行比较时散列。)

所以,只需将实际的原始字符串密码传递给user.check_password(),单元测试就会通过。

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 2016-05-21
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多