2011-11-30 43 views
6

Django-socialregistration, ha ottenuto seguente errore:oggetto 'AnonymousUser' non ha alcun attributo 'backend'

'AnonymousUser' object has no attribute 'backend' 

Come,

  1. clicco su facebook connect url.
  2. Mi ha portato su Facebook e mi ha chiesto di accedere. Così ho fatto, ho chiesto il permesso, ho concesso.
  3. Dopo di che mi reindirizza al mio sito. E chiedi di configurare. Fornisco utente e indirizzo email.

Trace punto::

  • volta a mio avviso, errore come sopra ottenuto

    path/to_file/socialregistration/views.py in post 
    128.  self.login(request, user) 
    

    Do Qualcuno sa, cosa c'è di sbagliato?

  • +0

    tuo oggetto della classe 'AnonymousUser' non ha attributo' backend'. Questo è ciò che è sbagliato. – Tadeck

    +0

    Lo so. La mia domanda è perché django-socialregistration non può ottenere un utente valido, ma ottiene AnonymousUser – Elisa

    +0

    Potresti incollare il tracback completo? – meson10

    risposta

    8

    Oh uomo che ho usato per ottenere questo errore per tutto il tempo, in fondo si sta chiamando

    self.login(request, user) 
    

    senza chiamare

    authenticate(username=user, password=pwd)

    primo

    quando si chiama authenticate, set di Django l'attributo backend sull'utente, notando quale back-end usare, vedi qui per maggiori dettagli https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate

    +2

    No Paulo, non è il mio caso. Il mio caso è il mio stupido errore che ho dimenticato le seguenti impostazioni: AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend', 'socialregistration.contrib.facebook.auth.FacebookAuth') – Elisa

    1

    Ho avuto lo stesso errore per un utente appena registrato.

    def attempt_login(self, email, password): 
        user = authenticate(username=email, password=password) 
        login(self.request, user) 
    
        return user 
    

    Ho controllato nel database e l'utente è stato creato dopo la registrazione, ma questo errore era ancora lì.

    Ho capito - il login dell'utente (email) era più lungo di 30 caratteri e il campo modulo non aveva alcuna convalida. Il nome utente sarebbe get truncated nel database e quindi l'autenticazione è stata chiamata per l'accesso inesistente.

    254 - carattere è la lunghezza consigliata del campo di posta elettronica.

    Soluzione:emailfield-max_length-r11092.patch

    1

    Ho appena ricevuto questo errore e ha trovato questo post .. La mia soluzione è stata nel caso era nel processo di registrazione. Quando l'utente è stato registrando, il mio api e serializzatore non era hashing la password .. Così nel api_view ho dovuto hash manualmente la password come questo ..

    from django.contrib.auth.hashers import make_password 
    
        # In the register api.. 
        @ensure_csrf_cookie 
        @api_view(['POST']) 
        def register_api(request): 
    
         # Anywhere before the serializer 
         request.DATA['password'] = make_password(request.DATA['password']) 
    
         # Then the serializer 
         serializer = RegisterSerializer(data=request.DATA) 
    
         # ... etc.. Note that if you want to login after register you will have 
         # to store the initial password is some buffer because.. authentication 
         # the none hashed version.. then 
          authenticate(username=request.DATA['username'], password=someBuffer) 
    

    Speranza che aiuta qualcuno ..

    Problemi correlati