Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Как лечить «WrongBackend» в django-social-auth?

Тестовое приложение. Зарегистрировал app во VK. Получил ID и защитный ключ. Для hosts сделал перенаправление зарегистрированного во ВК домена. Далее сделал через PuCharm:

pip install django-social-auth

В settings.py добавил 'social_auth' к INSTALLED_APPS:

INSTALLED_APPS = (
    # bla-bla-bla
    #...
    'social_auth',
)

Добавил туда же:

VK_APP_ID = '12345678'                       # мой ID для ВКонтакте
VK_API_SECRET = 'ir7HneLl1G8ugtIL1Z3z'      # мой защитный ключ для ВКонтакте


После прописал бэкенды в том же setting.py:
AUTHENTICATION_BACKENDS = (
    'social_auth.backends.contrib.vk.VKOAuth2Backend',                  # авторизация чекрез VKontakte
    'django.contrib.auth.backends.ModelBackend',                        # джанговский бэкэнд, иначе войти на сайт по связке пароль&логин будет невозможно.
    )


добавил дефолтного пользователя и разрешил создавать пользователей через social_auth:

SOCIAL_AUTH_DEFAULT_USERNAME = 'аnonymous'
SOCIAL_AUTH_CREATE_USERS = True

Перечислил pipeline для последовательной обработки отклика от ВКонтакте:

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user',
    'social_auth.backends.pipeline.associate.associate_by_email',
    'social_auth.backends.pipeline.user.get_username',
    'social_auth.backends.pipeline.user.create_user',
    'social_auth.backends.pipeline.social.associate_user',
    'social_auth.backends.pipeline.social.load_extra_data',
    'social_auth.backends.pipeline.user.update_user_details',
)


Кстати, до работы pipeline похоже дело даже не доходит... Далее в urls.py добавляю паттерн:

url(r'', include('social_auth.urls')),
и не забываю "from django.conf.urls import include"… Кстати, вот на счет r'' не очень ясно.. можно и r'social/' писать с тем-же результатом...

После, конечно, исполняю:

manage.py syncdb
manage.py migrate social_auth


А в шаблоне пишу:

<a href="{% url 'socialauth_begin' 'vkontakte-oauth2' %}">Enter VK</a>


Вроде все.
Запускаю.
Проверяю, что шаблон рендерит все правильно и получает:

<a href="/login/vkontakte-oauth2/">Enter VK</a>

Но когда кликаешь эту ссылку то вываливается по ошибке:

Exception Type:	WrongBackend
Exception Value:	Incorrect authentication service "vkontakte-oauth2"


Traceback сообщает:
C:\Program Files\Python\2.7\lib\site-packages\social_auth\decorators.py in wrapper
                raise WrongBackend(backend)


И не понятно, что делать. Ощущение, что где-то не подключено где-то, от social_auth… что-то типа "from social_auth import ????" надо добавить.

P.S. Пока бился с проблемой, обратил внимание, что manager.py иногда сыпятся вот такие сообщения:

Traceback (most recent call last):
  File "C:\Program Files\Python\2.7\lib\wsgiref\handlers.py", line 86, in run
    self.finish_response()
  File "C:\Program Files\Python\2.7\lib\wsgiref\handlers.py", line 128, in finish_response
    self.write(data)
  File "C:\Program Files\Python\2.7\lib\wsgiref\handlers.py", line 212, in write
    self.send_headers()
  File "C:\Program Files\Python\2.7\lib\wsgiref\handlers.py", line 270, in send_headers
    self.send_preamble()
  File "C:\Program Files\Python\2.7\lib\wsgiref\handlers.py", line 194, in send_preamble
    'Date: %s\r\n' % format_date_time(time.time())
  File "C:\Program Files\Python\2.7\lib\socket.py", line 324, in write
    self.flush()
  File "C:\Program Files\Python\2.7\lib\socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] ��������� �� ����� ����-
[15/Aug/2014 19:23:29] "GET /nav/124/31x40/?_=1408116205829 HTTP/1.1" 500 59
Traceback (most recent call last):
  File "C:\Program Files\Python\2.7\lib\SocketServer.py", line 595, in process_request_thread
    self.finish_request(request, client_address)
  File "C:\Program Files\Python\2.7\lib\SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Program Files\Python\2.7\lib\site-packages\django\core\servers\basehttp.py", line 150, in __init__
    super(WSGIRequestHandler, self).__init__(*args, **kwargs)
  File "C:\Program Files\Python\2.7\lib\SocketServer.py", line 653, in __init__
    self.finish()
  File "C:\Program Files\Python\2.7\lib\SocketServer.py", line 712, in finish
    self.wfile.close()
  File "C:\Program Files\Python\2.7\lib\socket.py", line 279, in close
    self.flush()
  File "C:\Program Files\Python\2.7\lib\socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] ��������� �� ����� ����-
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 59045)
----------------------------------------


Но иногда не сыпятся. Отчего такое случается не понял. Вроде зависит от того вызываешь через 127.0.0.1 или доменный алиас из hosts. Но может и нет...

P.P.S. Запускаю все на 8000 порту. Какая разница ВКонтакту какие у меня порты?!
  • Вопрос задан
  • 2844 просмотра
Пригласить эксперта
Ответы на вопрос 1
@madeinnikolaev
Если у Вас последняя версия django-social-auth, нужно использовать другой провайдер для авторизации.
Попробуйте заменить
<a href="{% url 'socialauth_begin' 'vkontakte-oauth2' %}">Enter VK</a>
на
<a href="{% url 'socialauth_begin' 'vk-oauth' %}">Enter VK</a>
Документация по django-social-auth
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы