Как войти в Google+ API с помощью Django?

Как я могу добавить подписку на API Google+ на свой сайт Django?

Ответ 1

Сначала вы должны создать учетные данные OAuth для Google +.

  • Перейдите в Консоль разработчика Google
  • Создайте новый проект.
  • Перейдите к "API и аутентификации" → "Экран авторизации" и дайте вашему продукту имя. Нажмите "Сохранить".
  • Перейдите к "API-интерфейсам и аутентификации" → "Учетные данные". В разделе "OAuth" нажмите "Создать новый идентификатор клиента". Добавить " http://localhost:8000/soc/complete/google-oauth2/" следует указывать в качестве URL-адреса обратного вызова. Это будет работать только для тестирования, убедитесь, что вы введете свой фактический домен в процессе производства.

Теперь добавьте python-social-auth в ваше приложение Django.

  • Установите python-social-auth с помощью pip
  • Задайте соответствующие настройки Django:

    • Добавить 'social.apps.django_app.default' в INSTALLED_APPS:
    • Добавьте настройки SOCIAL_AUTH_GOOGLE_OAUTH2_KEY и SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET с помощью ключа клиента и секрет, который вы создали ранее. Ключ клиента - это "Идентификатор клиента", указанный на экране "Учетные данные" на консоли разработчика Google, который заканчивается на ".apps.googleusercontent.com". Только принимайте участие перед точкой. Секрет указан как "Клиентский секрет".
    • Убедитесь, что параметр AUTHENTICATION_BACKENDS явно определен и содержит 'social.backends.google.GoogleOAuth2'. Примером может служить:

      AUTHENTICATION_BACKENDS = (
          'social.backends.google.GoogleOAuth2',
          'django.contrib.auth.backends.ModelBackend')
      
    • Определите параметр SOCIAL_AUTH_PIPELINE, как описано в документации python-social-auth. Все настройки указаны на этой странице.

    Если у вас есть что-то делать с информацией, которую вы получаете из Google+, я рекомендую определить функцию:

        def save_profile(backend, user, response, *args, **kwargs):
            if backend.name == "google-oauth2":
               # do something
    

    где user - объект django.contrib.auth.models.User, а response - словарь. Затем добавьте эту функцию в SOCIAL_AUTH_PIPELINE, используя полный путь модуля, после create_user.

    Если вы не хотите ничего делать с этой информацией, вы можете оставить конвейер по умолчанию как есть.

Наконец, вы захотите добавить URL-адреса python-social-auth на свой сайт urlpatterns:

from django.conf.urls import include 
url("^soc/", include("social.apps.django_app.urls", namespace="social"))

И это должно быть! Это время для тестирования. Во-первых, ./manage.py makemigrations для требуемых миграций python-social-auth, а затем ./manage.py migrate, как описано здесь. Затем вы можете запустить сервер разработки и перейти к http://localhost:8000/soc/login/google-oauth2/?next=/.

Надеюсь, я не пропустил объяснение какого-либо шага, и это сработает. Не стесняйтесь задавать больше вопросов и читать документы. Кроме того, здесь рабочий пример, который вы должны проверить.

Ответ 2

@rhaps0dy ответ правильный, но python-social-auth теперь устарел и перенесен как social-auth-app-django. Так вот что я сделал иначе, чем @rhaps0dy.

  • Вместо python-social-auth я установил social-auth-app-django,
  • 'social.apps.django_app.default' становится 'social_django'
  • 'social.backends.google.GoogleOAuth2' теперь 'social_core.backends.google.GoogleOAuth2'
  • url("^soc/", include("social.apps.django_app.urls", namespace="social")) становится url("^soc/", include("social_django.urls", namespace="social"))