当传递现有用户名和密码时,Django验证函数返回None

时间:2016-05-20 17:23:02

标签: python django authentication

我无法让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。我做错了什么?

2 个答案:

答案 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