无法使用authenticate()验证用户身份

时间:2013-02-09 17:03:27

标签: django

我正在尝试对用户进行身份验证,但是使用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()需要原始密码,因为它是用户在登录表单中手动编写的一个,出于安全原因,无法从存储在数据库中的散列数据开始重新生成... 所以,我从根本上遵循了一个不好的做法...在我看来,正确的举措是向用户呈现一个新页面说:“恭喜,您的帐户已被激活...现在您可以实际登录使用此新表格:)“

1 个答案:

答案 0 :(得分:0)

如果您使用原始密码手动查询数据库并成功返回用户,则表示您已在数据库中存储了原始密码,而不是哈希密码。当然,Django试图在数据库中找到散列密码会失败。

请注意,Django,而不是你,在这里做正确的事情:你必须存储哈希密码,而不是原始密码。