7

Sto usando djangoappengine. Quando provo a creare un nuovo utente, autenticarlo e collegarlo, ottengo il seguente errore AttributeError: 'AnonymousUser' object has no attribute 'backend'.Django App Engine: AttributeError: l'oggetto 'AnonymousUser' non ha attributo 'backend'

Il mio codice è semplice e si presenta come:

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) 

Ho solo il seguente errore sulla produzione e solo occasionalmente:

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' 

non sono sicuro, ma ho un brutto presentimento che questa eccezione è dovuta all'archivio dei dati di replica elevato e alla sua consistenza finale. Penso che authenticate() salvi il valore dell'utente e che login() esegua una query ma il valore utente non si è ancora propagato nell'HRDS. Qualcuno può confermare questo per essere vero? Se sì, come sarebbe stato risolto?

+0

Si prega di superare l'errore originale con traceback. – Nilesh

+0

Aggiunto il traceback. – speedplane

risposta

3

Quando si salva l'utente, non verrà attivato automaticamente. Si prega di controllare il link per AnonymousUser che dice come il tuo utente diventa AnonymousUser.

Quindi è necessario impostare tutti gli elementi che possono essere il tuo utente come AnonymousUser. Prima di autenticarsi, controllare user.is_anonymous().

+0

Io non la penso così. Come puoi vedere nel codice sopra, creo l'utente e lo autenticalo prima di provare ad accedere. Non dovrebbe essere un utente anonimo. – speedplane

+0

sì ma si prega di controllare 'is_anonymous()'. Quando crei l'utente non sarà automaticamente 'attivo' quindi assicurati che' is_anonymous() 'restituisca' False' e ​​'is_authenticated()' deve restituire 'True'. – Nilesh

0

Questo accade quando l'utente non è stato autenticato. Assicurarsi che si sta utilizzando stesso campo per loging backend ... per esempio io sono loging con e-mail (backend che utilizza la posta elettronica e password) in modo

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

se per me

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

Il backend è qui: http://www.micahcarrick.com/django-email-authentication.html

0

Se si utilizza la replica nel proprio database e si sta leggendo da Leggi replica durante la scrittura nel database principale/predefinito, quindi se c'è un ritardo di replica che potrebbe causare anche questo. Scriverete al master mentre l'autenticazione tenterà di leggere dalla replica di lettura risultante nel non trovare l'utente.

La soluzione è impostare i router per utilizzare il db predefinito per le query utente.

Problemi correlati