Django App Engine:AttributeError:'AnonymousUser'对象没有属性'后端'

时间:2012-02-15 07:23:20

标签: python django google-app-engine django-nonrel djangoappengine

我正在使用djangoappengine。当我尝试创建新用户,对该用户进行身份验证并将其登录时,我收到以下错误AttributeError: 'AnonymousUser' object has no attribute 'backend'

我的代码很简单,看起来像:

user = User.objects.create_user(username, username, password)
user.set_password(password)
user.save()

user = django.contrib.auth.authenticate(username=username, password=password)
django.contrib.auth.login(request, user)

我只在生产时遇到以下错误,只是偶尔出现:

web req_create: 'AnonymousUser' object has no attribute 'backend'
Traceback (most recent call last):
  File "/base/data/home/apps/s~XXXXX/1.356802202883392818/XXXX/XXX.py", line 332, in req_create
    login(request, user)
  File "/base/data/home/apps/s~XXXXX/1.356802202883392818/django/contrib/auth/__init__.py", line 82, in login
    request.session[BACKEND_SESSION_KEY] = user.backend
AttributeError: 'AnonymousUser' object has no attribute 'backend'

我不确定,但我感觉这个异常是由于高复制数据存储及其最终的一致性。我认为authenticate()保存了用户值,而login()执行了查询,但用户值尚未传播到HRDS中。任何人都可以证实这是真的吗?如果是这样,它将如何修复?

4 个答案:

答案 0 :(得分:3)

保存用户时,它不会自动激活。请查看AnonymousUser的链接,其中说明了您的用户如何成为AnonymousUser

因此,您必须设置可能使您的用户成为AnonymousUser的所有项目。在进行身份验证之前,请检查user.is_anonymous()

答案 1 :(得分:0)

有同样的问题。但问题是用户名是长的,它被截断为30个字符。在这里找到答案:

Django Register Form 'AnonymousUser' object has no attribute 'backend'

答案 2 :(得分:0)

当用户未经过身份验证时会发生这种情况。确保您使用相同的字段来记录Backend ...例如我使用电子邮件登录(使用电子邮件和密码的后端)所以

django.contrib.auth.authenticate(username=username, password=password)

如果对我来说

django.contrib.auth.authenticate(username=email, password=password)

后端在这里:http://www.micahcarrick.com/django-email-authentication.html

答案 3 :(得分:0)

如果您在数据库中使用复制并且在写入主/默认数据库时恰好正在读取只读副本,那么如果存在可能导致此问题的复制延迟。 你会写信给主人 而authenticate将尝试从只读副本中读取,导致找不到用户。

解决方案是将路由器设置为使用默认数据库进行用户查询。