Django App Engine: AttributeError: у объекта «AnonymousUser» нет атрибута «бэкэнд» - PullRequest
7 голосов
/ 15 февраля 2012

Я использую 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)

Iтолько производят следующую ошибку на производстве и только изредка:

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 ]

3 голосов
/ 15 февраля 2012

Когда вы сохраните пользователя, он не будет активирован автоматически.Пожалуйста, проверьте ссылку для AnonymousUser , в которой указано, как ваш пользователь становится AnonymousUser.

Таким образом, вы должны установить все элементы, которые могут сделать вашего пользователя, как AnonymousUser.Перед аутентификацией, пожалуйста, проверьте user.is_anonymous().

0 голосов
/ 11 февраля 2016

Если вы используете репликацию в своей базе данных и читаете из реплики Read во время записи в базу данных master / default, то это может привести к задержке репликации. Вы напишите мастеру во время проверки подлинности попытка чтения из реплики чтения приведет к тому, что пользователь не найдется.

Решение состоит в том, чтобы настроить маршрутизаторы на использование базы данных по умолчанию для пользовательских запросов.

0 голосов
/ 04 октября 2014

Это происходит, когда пользователь не прошел аутентификацию. Убедитесь, что вы используете одно и то же поле для входа в Backend ... например, я регистрируюсь по электронной почте (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

0 голосов
/ 08 марта 2012

Была такая же проблема. Но проблема была в том, что имя пользователя было длинным и было урезано до 30 символов. Нашел ответ здесь:

Форма регистра Django Объект AnonymousUser не имеет атрибута 'backend'

...