Объект 'AnonymousUser' не имеет атрибута 'backend' - PullRequest
6 голосов
/ 30 ноября 2011

Используя django-socialregistration, получил следующую ошибку:

'AnonymousUser' object has no attribute 'backend'

Как,

  1. Я нажимаю на ссылку для подключения к Facebook.
  2. Это заняло у меня Facebook и попросило войти в систему. Так я и попросил разрешения, я предоставил.
  3. После этого он перенаправляет меня на мой сайт. И попросить настроить. Я предоставляю имя пользователя и адрес электронной почты.
  4. Как только я отправляю сообщение об ошибке, как указано выше:

Точка трассировки:

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

Кто-нибудь знает, что не так?

Ответы [ 3 ]

8 голосов
/ 30 ноября 2011

О боже, я все время получал эту ошибку, в основном вы звоните

self.login(request, user)

без вызова

authenticate(username=user, password=pwd)

first

когда вы вызываете authenticate, django устанавливает атрибут backend для пользователя, отмечая, какой backend использовать, подробности см. Здесь https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate

1 голос
/ 22 августа 2014

Я только что получил эту ошибку и нашел этот пост .. Мое решение было в случае было в процессе регистрации. Когда пользователь регистрировался, мой API и сериализатор не хэшировали пароль ... Так что в api_view мне пришлось вручную хэшировать пароль, как этот

    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)

Надеюсь, что это помогает кому-то ..

1 голос
/ 28 февраля 2013

У меня была такая же ошибка для недавно зарегистрированного пользователя.

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

    return user 

Я зарегистрировался в базе данных, и пользователь был создан после регистрации, но эта ошибка все еще была.

Я разобрался - логин пользователя (электронная почта) был длиннее 30 символов, а поле формы не проверялось. Имя пользователя будет усечено в базе данных, и, следовательно, аутентификация была вызвана для несуществующего входа в систему.

254 - символ является рекомендуемой длиной поля электронной почты.

Решение: emailfield-max_length-r11092.patch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...