0

我正在尝试对用户进行身份验证,但是使用authenticate(), django (1.4) 返回None...我尝试手动查询数据库:

select * from auth_user where password = THE_PASSWORD

我让预期的用户回来了。我尝试使用断点进行调试,我发现check_password()函数 in正在django.contrib.auth.hashers返回......但老实说,我不知道为什么以及如何进一步挖掘问题......任何想法?Falsehasher.verify()

附言。我没有修改我的原件SECRET_KEY

更新:

OMG ...我终于找到了问题所在!实际上,在我的应用程序中,我有一个用户注册表格,一旦用户提交该表格,他将收到一封带有激活链接的电子邮件,该链接将用户设置为“活动”......我想实现“自动登录” “一旦用户通过链接被激活并且为了做到这一点,我试图使用散列密码(这是我可以通过编程方式检索的唯一一个)对他进行身份验证,但是 django authenticate() 需要原始密码,因为它是用户在登录表单中手动写入的那个,出于安全原因,它不能从存储在数据库中的散列开始重新生成......所以,我从根本上遵循了一种不好的做法......在我看来,正确的做法是向用户展示一个新页面,上面写着:“恭喜,

4

1 回答 1

0

如果您使用原始密码手动查询数据库并成功返回用户,这意味着您在数据库中存储了原始密码,而不是散列密码。自然,Django 在数据库中查找散列密码的尝试将失败。

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

于 2013-02-09T19:30:29.290 回答