2011-11-30 15 views
6

Usando Django-socialregistration, consiguió siguiente error:objeto 'AnonymousUser' no tiene atributo 'back-end'

'AnonymousUser' object has no attribute 'backend' 

Cómo,

  1. hago clic en conectar facebook url.
  2. Eso me llevó a Facebook y me pidió que inicie sesión. Así que lo hice, le pedí permiso, lo concedí.
  3. Después de eso me redirecciona a mi sitio. Y pregunta por la configuración. Proporciono usuario y dirección de correo electrónico.
  4. vez enviada, ha obtenido un error como el anterior:

traza punto:

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

¿Conoce a alguien, ¿qué ocurre?

+0

Su objeto de la clase 'AnonymousUser' no tiene el atributo' backend'. Esto es lo que está mal. – Tadeck

+0

Lo sé. Mi pregunta es por qué django-socialregistration no pudo obtener un usuario válido, pero se obtiene AnonymousUser – Elisa

+0

¿Podría pegar el trakback completo? – meson10

Respuesta

8

Oh hombre que solía obtener este error todo el tiempo, básicamente, a la que llama

self.login(request, user) 

sin llamar

authenticate(username=user, password=pwd)

primera

cuando llame authenticate, juegos de Django el atributo backend en el usuario, indicando qué back-end usar, vea aquí para más detalles https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate

+2

No Paulo, ese no es mi caso. Mi caso es que mi error tonto es que me olvido de seguir las configuraciones: AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend', 'socialregistration.contrib.facebook.auth.FacebookAuth') – Elisa

1

Tuve el mismo error para un usuario que se acaba de registrar.

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

    return user 

Me registré en la base de datos y el usuario ha sido creado después del registro, pero este error todavía estaba allí.

Me di cuenta: el inicio de sesión del usuario (correo electrónico) tenía más de 30 caracteres y el campo de formulario no tenía validación. El nombre de usuario sería get truncated en la base de datos y, por lo tanto, se solicitó autenticación para el inicio de sesión inexistente.

254 - carácter es la longitud recomendada del campo de correo electrónico.

Solución:emailfield-max_length-r11092.patch

1

acabo de recibir este error y se encontró este post .. Mi solución fue en el caso estaba en el proceso de registro. Cuando el usuario se registra, mi api y serializador no se hashing la contraseña .. Así que en el api_view que tenía para discutir a fondo manualmente la contraseña como esta ..

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) 

la esperanza de que ayude a alguien ..

Cuestiones relacionadas