Django, App Engine: AttributeError: 'AnonymousUser' - Objekt hat kein Attribut 'backend'
Ich bin mit djangoappengine. Wenn ich versuche einen neuen Benutzer anzulegen, authentifizieren Sie Benutzer, und melden Sie Sie in, bekomme ich die folgende Fehlermeldung AttributeError: 'AnonymousUser' object has no attribute 'backend'
.
Mein code ist einfach und sieht wie folgt aus:
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)
Erhalte ich nur folgende Fehlermeldung in der Produktion und nur gelegentlich:
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'
Ich bin mir nicht sicher, aber ich habe ein schlechtes Gefühl, dass diese Ausnahme ist aufgrund der hohen Replikations-Daten speichern und seine spätere Konsistenz. Ich denke, dass authenticate()
speichert die Benutzer-Wert und das login()
führt eine Abfrage der Benutzer jedoch Wert noch nicht vermehrt in die HRDS. Kann das jemand bestätigen, dass dies wahr ist? Wenn ja, wie würde es behoben werden?
- Bitte Vergangenheit der ursprüngliche Fehler mit traceback.
- Hinzugefügt wird die traceback.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim speichern der Benutzer-es wird nicht automatisch aktiviert. Bitte überprüfen Sie den link für AnonymousUser, die sagt, wie Sie Ihre Nutzer
AnonymousUser
.So haben Sie, um alle Elemente, die möglicherweise machen Sie Ihre Benutzer als
AnonymousUser
. Vor dem authentifizieren überprüfen Sie bitteuser.is_anonymous()
.is_anonymous()
. Beim erstellen der Benutzer wird es nicht automatischactive
also bitte stellen Sie sicher, dassis_anonymous()
zurückFalse
undis_authenticated()
muss zurückTrue
.Hatte das gleiche problem. Aber das problem war, dass der Benutzername war zu lang und es wurde auf 30 Zeichen abgeschnitten. Fand die Antwort hier:
Django Registrieren Form 'AnonymousUser' - Objekt hat kein Attribut 'backend'
Passiert, wenn ein Benutzer nicht authentifiziert ist. Werden Sie sicher, dass Sie dasselbe Feld für die Anmeldung im Backend... so bin ich zum Beispiel Anmeldung mit E-Mail (Backend, die verwendet E-Mail und Passwort), so
wenn für mich
Backend ist hier: http://www.micahcarrick.com/django-email-authentication.html
Wenn Sie mit der Replikation in der Datenbank, und zufällig Lesen von Read replica beim schreiben Ihrer master - /default-Datenbank, dann, wenn es eine Replikation lag, dass könnte auch dazu führen, diese.
Sie schreiben zum master
während der Authentifizierung werden versuchen, Sie zu Lesen read replica wodurch nicht finden, die User.
Die Lösung wird Ihrem Router die Standard-db für den User Abfragen.