gpt4 book ai didi

Django 身份验证失败

转载 作者:行者123 更新时间:2023-12-01 22:09:44 25 4
gpt4 key购买 nike

我真的很想念这里发生的事情。 Django 1.3。

症状:身份验证被破坏。我已将问题简化为:

./manage.py shell
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>from django.contrib.auth.models import User
>>> users = User.objects.all()
>>> users
[<User: jal>]
>>> users[0].set_password('whatever');
>>> users[0].save()
>>> user = auth.authenticate(username="jal", password="whatever")
>>> print user
None

我对此感到茫然。

编辑:

>>> from django.contrib.auth.models import User
>>> user = User.objects.get(username="jal")
>>> print user
jal
>>> user.check_password('whatever')
False

我正在使用 django.contrib.auth.backends.ModelBackend 。

编辑二:

>>> print user
jal
>>> print user.is_active
True

编辑三:

阿拉斯代尔是对的 - 谢谢。

>>> users = User.objects.all()
>>> user = users[0]
>>> user.set_password('whatever')
>>> user.save()
>>> u2 = auth.authenticate(username="jal", password="whatever")
>>> print u2
jal

这仍然是一个谜,为什么它在实际访问 Django 管理 GUI 时会被破坏,这就是我首先走这条路的原因。无论密码是否正确,它都会显示“请输入正确的用户名和密码。请注意,这两个字段都区分大小写”。

最佳答案

您遇到此问题是因为 Django querysets are lazy 。每次访问 users[0] 时,Django 都会返回一个不同的对象。

要演示这一点,请尝试以下操作:

>>> users = User.objects.all()
>>> print id(users[0])
58753692
>>> print id(users[0])
58753111

可以看到,每次的object id都不一样。您保存的对象与您为其设置密码的对象不同。新密码尚未保存到数据库,因此认证失败。

要解决此问题,您可以使用将 users[0] 分配给变量,或使用 user list() 强制评估查询集。

# Assign users[0] to a variable.    
users = User.objects.all()
user = users[0]
user.set_password('whatever')
user.save()


# Force the queryset to be evaluated by using list()
users = list(User.objects.all())
users[0].set_password('whatever')
users[0].save()

编辑:此建议不是这里的问题,但可能会帮助其他人。

AUTHENTICATION_BACKENDS 的值是多少在您的设置文件中。您不必在 settings.py 中定义它,因为它默认为:

AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', ) 

如果您将其设置为其他内容,可能会导致问题。

关于Django 身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com