我正在尝试对用户进行身份验证,但是使用authenticate()
,django(1.4)会返回None
...我尝试手动查询数据库:
select * from auth_user where password = THE_PASSWORD
我得到了预期的用户。
我尝试使用断点进行调试,我发现check_password()
中的django.contrib.auth.hashers
函数正在False
中返回hasher.verify()
...但老实说,我不知道为什么以及如何挖掘进一步解决问题...任何想法?
PS。我没有修改原来的SECRET_KEY
更新
天啊......我终于弄明白了这个问题!在我的应用程序的实践中,我有一个用户注册表单,一旦用户提交该表单,他将收到一封带有激活链接的电子邮件,将用户设置为“活动”...我想实现“自动登录” “一旦用户通过链接激活,为了做到这一点,我试图使用散列密码验证他(这是我可以通过编程方式检索的唯一密码),但是django authenticate()需要原始密码,因为它是用户在登录表单中手动编写的一个,出于安全原因,无法从存储在数据库中的散列数据开始重新生成... 所以,我从根本上遵循了一个不好的做法...在我看来,正确的举措是向用户呈现一个新页面说:“恭喜,您的帐户已被激活...现在您可以实际登录使用此新表格:)“答案 0 :(得分:0)
如果您使用原始密码手动查询数据库并成功返回用户,则表示您已在数据库中存储了原始密码,而不是哈希密码。当然,Django试图在数据库中找到散列密码会失败。
请注意,Django,而不是你,在这里做正确的事情:你必须存储哈希密码,而不是原始密码。