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

0le*_*leg 4 python passwords django python-unittest

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

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

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

assert user.check_password(user.password), "Password doesn't match"
Run Code Online (Sandbox Code Playgroud)

user.password 返回MD5 unicode字符串.

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

Rah*_*pta 8

发生这种情况是因为check_password接受原始字符串并且您正在向其传递散列.

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

assert user.check_password('my_password')  # True because accepts a raw string
Run Code Online (Sandbox Code Playgroud)

user.password是关于的哈希和元数据password.

根据文档,

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

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