Поиск по сайту:

Как создать систему социальной аутентификации в Django с использованием OAuth


Узнайте, как создать безопасную систему входа в систему с учетными записями социальных сетей в Django с использованием OAuth.

Социальная аутентификация — это способ подтвердить личность человека через учетную запись в социальной сети вместо использования паролей. В веб-разработке всегда полезно аутентифицировать пользователей без паролей. Таким образом, они могут войти в систему через социальные приложения, такие как Google, Twitter или GitHub.

Включение социальной аутентификации — отличный способ повысить безопасность вашего приложения за счет снижения риска распространенных уязвимостей, связанных с паролями. Это также улучшит взаимодействие с пользователем вашего приложения, поскольку пользователям не нужно будет запоминать много паролей.

Аутентификация пользователя в Django

Django предоставляет разработчикам систему аутентификации по умолчанию. Однако эта система аутентификации использует традиционную аутентификацию, которая включает ручной сбор таких данных, как имя пользователя, адрес электронной почты, пароль, имя и фамилия пользователя.

По своей конструкции система аутентификации Django очень универсальна и не предоставляет многих функций, используемых сегодня в большинстве систем веб-аутентификации. В дополнение к этому вам нужно использовать сторонние пакеты, такие как пакет django-allauth.

Как включить OAuth в Django

Чтобы аутентифицировать пользователей с помощью OAuth в приложении Django, вы можете использовать пакет Django под названием django-allauth.

Django Allauth — это пакет, который обеспечивает аутентификацию, регистрацию, управление учетными записями и аутентификацию сторонних (социальных) учетных записей для вашего проекта Django. Следующие шаги помогут вам настроить Django Allauth для вашего проекта Django.

Шаг 1. Установите и настройте Django-Allauth

Если вы еще этого не сделали, создайте виртуальную среду и установите django-allauth через pip:

pip install django-allauth

Обратите внимание, что для его работы вы должны использовать Python 3.5 или новее и Django 2.0 или новее.

Шаг 2. Добавьте необходимые приложения в Django для Django-Allauth

После установки django-allauth откройте файл settings.py и добавьте следующие приложения в список INSTALLED_APPS:

INSTALLED_APPS = [
    """
    Add your other apps here
    """
    # Djang Allauth configuration apps
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
]

Вот несколько моментов, на которые следует обратить внимание в отношении некоторых из вышеперечисленных приложений:

  • Приложение allauth.socialaccount позволит пользователям входить в систему через социальные приложения, такие как X (ранее Twitter), Instagram, GitHub и другие.
  • Приложение django.contrib.sites — это встроенная платформа Django, необходимая для работы django-allauth. Приложение предоставляет возможность управлять несколькими сайтами и различать их в одном проекте Django. Вы можете понять, как это работает, обратившись к документации Django.

Шаг 3. Определите серверную часть аутентификации для вашего проекта

Следующий шаг — определить, как вы хотите аутентифицировать своих пользователей. Это можно сделать, настроив AUTHENTICATION_BACKENDS в файле settings.py. Для django-allauth вам следует добавить следующее:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

Приведенный выше фрагмент кода определяет два механизма аутентификации:

  1. Первый из них используется по умолчанию в Django. Это позволит пользователю с правами администратора войти в панель администратора независимо от конфигурации django-allauth.
  2. Второй определяет сервер аутентификации для django-allauth.

Шаг 4. Добавьте идентификатор своего сайта

В файле настроек вам следует добавить идентификатор вашего сайта. Вот пример:

SITE_ID = 1

По умолчанию в панели администратора есть сайт example.com. Вы можете изменить этот сайт или добавить его для себя. В любом случае вам следует войти в панель администратора и перейти к приложению Сайты.

Чтобы получить идентификатор сайта Django, откройте интерфейс командной строки (CLI) и выполните следующую команду:

python manage.py shell

Затем напишите этот скрипт в оболочке Python:

from django.contrib.sites.models import Site
current_site = Site.objects.get_current()
site_id = current_site.id
site_name = current_site.name
print("Site ID:", site_id)
print("Site Name:", site_name)

Приведенный выше код выведет имя сайта, а также его идентификатор.

Шаг 5. Настройте URL-адреса

В файле urls.py вашего проекта настройте шаблон URL-адреса для django-allauth. Вот как это должно выглядеть:

from django.urls import path, include
urlpatterns = [
    # Djang-allauth url pattern
    path('accounts/', include('allauth.urls')),
]

Благодаря этой настройке вы можете запустить сервер разработки и перейти по адресу http://127.0.0.1:8000/accounts/. Если для параметра DEBUG установлено значение True, вы должны увидеть список доступных шаблонов URL-адресов для django-allauth.

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

Как реализовать вход/регистрацию Google в вашем приложении Django

После настройки django-allauth вы должны быть готовы разрешить вашим пользователям аутентифицировать себя с помощью своих учетных записей в социальных сетях, таких как Google.

Шаг 1. Зарегистрируйте своего поставщика социальных учетных записей в установленных приложениях.

В файле settings.py вам следует добавить поставщика учетной записи социальной сети в INSTALLED_APPS. В данном случае это Google. Другие варианты — Instagram, X и т. д.

INSTALLED_APPS = [
    """
    Add your other apps here
    """
    # Social account provider (google)
    'allauth.socialaccount.providers.google',
]

Шаг 2. Создайте свой идентификатор клиента и секретный ключ в Google

Чтобы выполнить этот шаг, вам необходимо создать учетную запись Google. Если вы это сделали, выполните следующие действия:

  1. Перейдите в консоль Google Cloud, чтобы создать новый проект. Сначала нажмите на раскрывающийся список, показанный на изображении ниже:

  2. Затем нажмите НОВЫЙ ПРОЕКТ:

  3. Введите имя своего проекта, затем нажмите кнопку СОЗДАТЬ:

  4. Выбрав проект, нажмите гамбургер-меню. Выберите API и службы, затем Учетные данные:

  5. Затем нажмите на опцию НАСТРОЙКА ЭКРАНА СОГЛАСИЯ и выберите Внешний:

  6. На следующей странице введите имя своего приложения и, если необходимо, укажите адрес электронной почты. Вы также можете изучить конфигурации для некоторой настройки. После этого нажмите СОХРАНИТЬ И ПРОДОЛЖИТЬ.

  7. В меню слева выберите Учетные данные. После этого нажмите CREATE CREDENTIALS и выберите Идентификатор клиента OAuth.

  8. Затем выберите Тип приложения и введите его имя. В этом руководстве Типом приложения будет Веб-приложение.

  9. Затем добавьте URI для Авторизованных источников JavaScript и URI авторизованного перенаправления. Хост вашего веб-сайта должен быть источником JavaScript, и система будет перенаправлять пользователей на URI перенаправления после аутентификации. URI перенаправления обычно должен содержать ваше-имя хоста/аккаунты/google/login/callback /. Для режима разработки это будет: http://127.0.0.1:8000/accounts/google/login/callback/. Когда закончите, нажмите СОЗДАТЬ.

  10. После создания учетных данных вы можете скопировать свой Идентификатор клиента или Секрет клиента в безопасное место или загрузить их в виде файлов JSON.

Шаг 3. Добавьте свой идентификатор клиента и секретный ключ в свое приложение Django.

После создания необходимых учетных данных перейдите по адресу http://127.0.0.1:8000/admin, выберите Социальные приложения и создайте новое социальное приложение. Выполните следующие действия, чтобы создать новое социальное приложение:

  1. Добавьте провайдера. Поставщик относится к приложению, с помощью которого вы аутентифицируете своего пользователя. В данном случае это Google, в другом случае это может быть Snapchat.
  2. Введите имя для вашего нового социального приложения. Убедитесь, что это разумное имя
  3. Вставьте Идентификатор клиента, скопированный из Google.
  4. В качестве Секретного ключа вставьте секрет клиента, скопированный из Google.
  5. Поле Ключ не применяется для аутентификации в Google, поэтому игнорируйте его.
  6. Наконец, выберите сайт, с которым будет связано социальное приложение.

Шаг 4. Проверьте свою аутентификацию Google

Выйдите из панели администратора и перейдите по адресу http://127.0.0.1:8000/accounts/login/. Вы увидите возможность войти через Google.

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

После того как вы выберете учетную запись, вы будете перенаправлены на http://127.0.0.1:8000/accounts/profile/. Это означает, что ваше приложение работает отлично. Вы можете создавать собственные шаблоны для замены шаблонов по умолчанию.

Улучшение регистрации пользователей с помощью социальной аутентификации в Django

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

Статьи по данной тематике: