Django App Engine: AttributeError: 'AnonymousUser' objet n'a pas d'attribut 'backend'
Je suis en utilisant djangoappengine. Lorsque j'essaie de créer un nouvel utilisateur, d'authentifier l'utilisateur et se connecter, j'obtiens l'erreur suivante AttributeError: 'AnonymousUser' object has no attribute 'backend'
.
Mon code est simple et ressemble à:
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)
Je ne reçois le message d'erreur suivant sur la production et seulement de temps en temps:
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'
Je ne suis pas sûr, mais j'ai un mauvais sentiment que cette exception est due à la forte réplication de données à stocker et à son éventuelle cohérence. Je pense que authenticate()
évite à l'utilisateur de la valeur et que login()
fait une requête mais la valeur pour l'utilisateur n'a pas encore propagé dans la DDH. Quelqu'un peut confirmer que c'est vrai? Si oui, comment serait-il fixe?
Ajouté le traceback.
OriginalL'auteur speedplane | 2012-02-15
Vous devez vous connecter pour publier un commentaire.
Lorsque vous enregistrez l'utilisateur, il ne sera pas activer automatiquement. Veuillez vérifier le lien pour AnonymousUser qui dit comment l'utilisateur de votre devenir
AnonymousUser
.Donc, vous devez définir tous les éléments qui peuvent faire de votre utilisateur comme
AnonymousUser
. Avant de s'authentifier veuillez vérifieruser.is_anonymous()
.oui mais s'il vous plaît vérifier la
is_anonymous()
. Lorsque vous créez l'utilisateur, il ne sera pas automatiquementactive
alors assurez-vous queis_anonymous()
sera de retourFalse
etis_authenticated()
doit retournerTrue
.OriginalL'auteur Nilesh
Eu le même problème. Mais le problème était que le nom d'utilisateur a été long et il a été tronqué à 30 caractères. Trouvé la réponse ici:
Django Formulaire d'enregistrement de l' 'AnonymousUser' objet n'a pas d'attribut 'backend'
OriginalL'auteur Raz
Qui se produit lorsque l'utilisateur n'est pas authentifié. Assurez-vous que vous utilisez le même domaine pour les loging Backend... par exemple je suis loging avec e-mail (Backend qui utilise l'e-mail et mot de passe) afin de
si pour moi
Le backend est ici: http://www.micahcarrick.com/django-email-authentication.html
OriginalL'auteur carlitux
Si vous utilisez la réplication dans votre base de données et arriver à être la lecture de réplica en Lecture lors de l'écriture de votre maître/base de données par défaut, alors si il y a un retard de réplication, qui pourrait également être en cause.
Vous allez écrire au maître
alors que authentifier essayez de lire à partir de réplica en lecture entraînant pas de trouver l'Utilisateur.
La solution est de configurer votre routeurs à utiliser par défaut db pour les requêtes de l'Utilisateur.
OriginalL'auteur Ali