Простой и современный способ реализовать вход через Facebook в приложение Django.

Эта проблема очень распространена в stackoverflow, и есть много разных вопросов и ответов по этому поводу, но я не смог найти именно то, что мне нужно.

Во-первых, я хотел бы точно определить, что мне нужно: возможность разрешить пользователям входить в мое приложение, используя свои учетные данные Facebook. Приложение сохранит соответствующего классического пользователя Django. Мне нужно будет только использовать изображение профиля пользователя и убедиться, что каждый раз один и тот же пользователь Facebook будет связан с соответствующим пользователем Django.

К сожалению, я нахожу это действительно разочаровывающим по следующим причинам:

  1. К настоящему времени, прочитав много, я не мог найти, какой пакет лучше всего подходит для этой задачи.
  2. Некоторые люди рекомендуют django-social-auth и хвалят его функциональность и документацию. Лично я не понимаю, почему, так как это не конкретно для Facebook и нет никаких пояснений по поводу клиентской части, т.е. кнопки входа в Facebook и того, как работает весь поток.
  3. Когда вы идете к разработчикам Facebook, вы вдруг обнаруживаете, что читаете о каком-то волшебном javascript sdk и о обещании, что это все, что вам нужно. Затем вы снова расстраиваетесь и не можете понять, как SDK, связанный с клиентской стороной, может регистрировать пользователей в вашем приложении.

Я знаю, что разработчики каким-то образом внедряют пакеты аутентификации Facebook в свои приложения, но я просто не могу понять, как это сделать.

Если бы кто-нибудь мог сказать мне: на данный момент, как лучше всего добавить аутентификацию Facebook в мое приложение Django? Я также хотел бы попросить подробную документацию/руководство, в котором объясняется, как войти в систему пользователя Facebook, от настроек и уровня конфигурации до регистрации в приложении Django и коде на стороне клиента.


person user1639431    schedule 31.08.2012    source источник


Ответы (3)


Есть несколько способов подойти к проблеме, какой из них является «лучшим», действительно субъективен.

Субъективно говоря, вы могли бы выбрать django-allauth. Вот несколько советов, которые помогут вам начать работу:

  • Если вы хотите, чтобы регистрация была простой, установите SOCIALACCOUNT_AUTO_SIGNUP на True, чтобы получить вход без вопросов. Пользователи просто одобряют диалог FB, и они сразу же входят на ваш сайт.

  • Добавление кнопки входа в ваш шаблон — это просто вопрос:

    <a href="{% provider_login_url "facebook" %}">Sign In</a>

  • Приложение предлагает поддержку входа в систему JS SDK (за: пользователи привыкли к типичному всплывающему окну FB), или вы можете использовать свой собственный поток OAuth. Что угодно.

person pennersr    schedule 01.09.2012
comment
Объясните, пожалуйста, как проходит поток? Я имею в виду, скажем, я делаю все эти вещи - вошедший в систему пользователь FB получает соответствующего пользователя django? Как получить доступ и использовать изображение профиля пользователя FB? Как я могу узнать, был ли зарегистрирован определенный пользователь Django с использованием входа в Facebook? - person user1639431; 01.09.2012
comment
щелчок по входу приводит к: DoesNotExist at /accounts/facebook/login/ Соответствующий запрос SocialApp не существует. - person user1639431; 01.09.2012
comment
Изображения профиля см. в разделе stackoverflow.com/questions/12222021/ - person pennersr; 01.09.2012
comment
Решил проблему. Простота установки. Огромное спасибо! Пойду читать про аватарки... - person user1639431; 02.09.2012
comment
Я использовал django-allauth от Pennersr, как он предложил. @kidcapital - person user1639431; 11.01.2013

Самый быстрый способ понять поток FB Oauth 2.0 — поиграть с Javascript SDK от FB. Как только вы освоитесь, PHP-библиотека FB станет похожей. Кроме того, другие сайты OAuth, такие как Google, Twitter или Dropbox, имеют почти идентичную реализацию.

Детскими шагами:

  1. Узнайте, как установить FB Javascript SDK на простую страницу.

  2. Используйте FB.login, чтобы определить статус входа и получить URL-адрес для входа.

  3. Наконец, используйте FB.Event.Subscribe и подпишитесь на авторизацию .statusChange для обнаружения изменений входа/выхода.

Кроме того, полезно проверить https://developers.facebook.com/roadmap/ о предстоящих функциях. или функции удаляются.

person Alvin K.    schedule 01.09.2012
comment
Спасибо - так что мне нужно узнать о FB js sdk, но не нужно устанавливать какой-либо специальный пакет, кроме python-oauth2? (другими словами: не нужно устанавливать django-social-auth?) - person user1639431; 01.09.2012
comment
Верно, обычно я пишу небольшие приложения, чтобы время от времени тестировать FB (и Google) API, просто чтобы убедитесь, что мой код все еще действителен. Это приложение Python работает на Google App Engine. - person Alvin K.; 01.09.2012

django-social-auth предназначен не только для Facebook, но это не значит, что вы должны использовать все доступные бэкенды.

Документация по проекту находится по адресу http://django-social-auth.readthedocs.org/en/latest/index.html и сведения о серверной части Facebook на странице http://django-social-auth.readthedocs.org/en/latest/backends/facebook.html.

person omab    schedule 01.09.2012
comment
Я следил за документацией и установил django-social-auth и использовал только бэкэнды, связанные с Facebook. Я также установил что-то в urls.py проекта. Йиппи. Что теперь?! А как насчет просмотров? Как создаются пользователи? Как могло случиться, что я не написал никакой функции views.py? Где описано течение? Как насчет клиентской части и кнопки входа в Facebook? Как насчет жетонов? Что делать дальше...? - person user1639431; 01.09.2012
comment
django-social-auth (отныне DSA) заботится только о входе в систему/регистрации/отключении, он не предлагает других представлений, шаблонов и т. д., которые пользователь может выполнить для обеспечения желаемого пользовательского опыта для сайта. Регистрация пользователя запускается любой ссылкой/кнопкой, указывающей на /login/facebook/, вы можете использовать {% url socialauth_begin "facebook" %} в своих шаблонах, что создаст экземпляр User и UserSocialAuth (с Facebook access_token, идентификатором Facebook и т. д.). Затем вы можете вызвать любой API Facebook, к которому у вашего access_token есть права доступа. На данный момент нет объяснительного потока. - person omab; 04.09.2012
comment
Спасибо, но именно в этом проблема - на данный момент нет пояснений. Поскольку я недостаточно опытен, чтобы сделать один из своих, я просто надеюсь, что в будущем это сделает какая-нибудь благородная душа. - person user1639431; 04.09.2012