我无法让Django authenticate
函数以我期望的方式工作。当我创建新用户并尝试以described in the documentation的方式进行身份验证时,authenticate()
函数会返回None
。我看过很多帖子关于" authenticate
没有工作",但没有一个解决方案适合我。这是一个演示:
In [34]: user = User.objects.create(username='fakeuser', email='fake@fakemail.com', password='abc')
In [35]: user
Out[35]: <User: fakeuser>
In [39]: auth_user = authenticate(username='fakeuser', password='abc')
In [40]: print(auth_user)
None
据我所知,authenticate()
在这种情况下应返回一个对象,然后我可以将其传递给login()
函数以记录用户,但我得到了None
。我做错了什么?
答案 0 :(得分:4)
您正在创建用户错误。 Django将始终散列传递给身份验证的密码,但您使用纯文本密码创建用户。
改为使用create_user
。
答案 1 :(得分:1)
Django的密码散列是问题,正如丹尼尔罗斯曼在他的回答中所说的那样。您也可以通过两个步骤解决此问题:
>>> user = User.objects.create(username='fakeuser', email='fake@fakemail.com', password='whatever')
>>> user.set_password('abc') # takes plain text and stores the hash
>>> user.check_password('abc')
True