Django User.check_password不会通过密码检查

时间:2015-06-15 15:41:23

标签: python django passwords python-unittest

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

使用Django的本机身份验证功能user.check_password

问题在于check_password由于某种原因而无法接受user对象自己的密码。例如,这会引发错误:

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

user.password返回MD5 unicode字符串。

有谁知道为什么没有通过支票以及检查如何通过?

1 个答案:

答案 0 :(得分:7)

这种情况正在发生,因为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

  

check_password(raw_password)
   如果给定的原始字符串是,则返回True   用户的正确密码。 (这会处理密码   哈希进行比较。)

因此,只需将实际原始字符串密码传递给user.check_password(),即可通过unittest。