Django авторизация через Яндекс, Google, ВконтактеDjango авторизация через Яндекс, Google, Вконтакте

Представьте, что вы создаете своё первое шикарное приложение на Django. Вы продумали все до мелочей, сделали всё на высшем уровне, и пользователи уже начинают стекаться к вашему проекту. Но тут наступает момент истины: им нужно регистрироваться и авторизовываться! А кому хочется придумывать новый пароль, когда уже есть куча аккаунтов в социальных сетях? Никому! В такие моменты на помощь приходят соцсети — как супергерои, которые спасают ваш проект от унылого процесса регистрации.

Сегодня мы разберём, как настроить авторизацию через ВКонтакте, Яндекс и Google в вашем приложении на Django. Сделаем это легко и весело, как будто взломали тайный супергеройский портал.

Подготовка к внедрению суперсил

Прежде чем начать интеграцию авторизации через соцсети, нам нужно подготовить нашу систему. Это как выбрать себе подходящий костюм: важно, чтобы не только стильно, но и функционально. Для этого мы используем популярный пакет social-auth-app-django — наше супероружие для подключения соцсетей к Django.

Для начала установим пакет:

pip install social-auth-app-django

Добавим его в INSTALLED_APPS в файле settings.py:

INSTALLED_APPS = [
# ваши приложения
'social_django',
]

Теперь наше приложение готово поглощать силу социальных сетей. Переходим к следующему шагу — настройке супергеройских учетных данных для ВКонтакте, Яндекса и Google.

Настройка суперсил (ВКонтакте, Яндекс, Google)

Чтобы взаимодействовать с соцсетями, нужно пройти небольшую церемонию инициации. Каждая соцсеть захочет удостовериться, что вы не бот, и выдаст вам свои суперключи — API ключи. Не переживайте, это не так сложно, как кажется. Давайте разберём всё по порядку.

Django авторизация ВКонтакте: Присоединяемся к силе восточных героев

  1. Идём на ВКонтакте для разработчиков и создаём новое приложение.
  2. В настройках получаем ID приложения и Защищённый ключ. Эти ключи позволят вам подключиться к ВКонтакте и получать информацию о пользователях.
  3. Теперь в settings.py добавляем следующие строки:
SOCIAL_AUTH_VK_OAUTH2_KEY = 'Ваш ID приложения'
SOCIAL_AUTH_VK_OAUTH2_SECRET = 'Ваш Защищённый ключ'
  1. Обратите внимание, что вам нужно указать корректные URL-адреса для обратного вызова (callback URL) в настройках приложения ВКонтакте. Для локальной разработки это будет что-то вроде http://localhost:8000/auth/complete/vk-oauth2/.

Теперь ВКонтакте готов впускать пользователей в ваше приложение через свою социальную сеть!

Django авторизация Яндекс: Мастер шифровки на связи

Яндекс — это как Гудини в мире соцсетей, специалист по авторизации и магии с токенами.

  1. Идём в Яндекс OAuth, регистрируем новое приложение.
  2. Получаем ID приложения и Пароль приложения.
  3. Добавляем эти данные в settings.py:
SOCIAL_AUTH_YANDEX_OAUTH2_KEY = 'Ваш ID приложения'
SOCIAL_AUTH_YANDEX_OAUTH2_SECRET = 'Ваш Пароль приложения'
  1. И не забудьте указать корректный URL-адрес для обратного вызова: http://localhost:8000/auth/complete/yandex-oauth2/.

Теперь Яндекс тоже присоединился к нашей социальной суперсети!

Django авторизация Google: Великий и могучий мастер данных

Google — это не только ваш лучший друг, когда вы ищете рецепт бананового хлеба или как починить велосипед, но и отличный инструмент для аутентификации.

  1. Заходим в Google Developer Console, создаём проект, включаем Google+ API (да, они до сих пор его используют для авторизации).
  2. Переходим в Credentials и создаём новые учетные данные OAuth 2.0. Получаем Client ID и Client Secret.
  3. Добавляем их в settings.py:
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'Ваш Client ID'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'Ваш Client Secret'
  1. Callback URL для Google: http://localhost:8000/auth/complete/google-oauth2/.

Теперь ваш проект обладает силой Google! Переходим к следующему этапу — настройке путей и маршрутов для этих социальных суперсил.

Настройка маршрутов (чтобы супергерои знали, куда идти)

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

Откроем файл urls.py и добавим туда пути для работы с соцсетями:

from django.urls import path, include

urlpatterns = [
# ваши другие маршруты
path('auth/', include('social_django.urls', namespace='social')),
]

Теперь ваше приложение знает, куда направлять пользователей для авторизации через ВКонтакте, Яндекс или Google.

Включаем супергеройский механизм аутентификации

Когда пользователи решат войти через соцсеть, Django должен понять, что мы хотим их пускать. Для этого мы настроим механизм аутентификации в settings.py. Добавим следующие строки:

AUTHENTICATION_BACKENDS = (
'social_core.backends.vk.VKOAuth2',
'social_core.backends.yandex.YandexOAuth2',
'social_core.backends.google.GoogleOAuth2',
'django.contrib.auth.backends.ModelBackend',
)

Эти бэкенды скажут Django: “Эй, не волнуйся, эти пользователи входят через соцсети, так что всё в порядке!”

Обратные вызовы и редиректы

Когда пользователь успешно входит в ваше приложение через ВКонтакте, Яндекс или Google, ему нужно куда-то вернуться. Для этого используются обратные вызовы. Чтобы всё сработало, важно правильно настроить callback URL как в вашем приложении, так и на стороне соцсетей.

Например, для ВКонтакте это будет:

  1. В настройках приложения ВКонтакте укажите: http://localhost:8000/auth/complete/vk-oauth2/.
  2. Для Яндекса и Google это также будут: http://localhost:8000/auth/complete/yandex-oauth2/ и http://localhost:8000/auth/complete/google-oauth2/.

Теперь пользователи, успешно авторизовавшиеся через соцсеть, вернутся к вам как герои, готовые покорять ваше приложение.

Создание пользователей (супергеройский сбор данных)

Когда пользователи авторизуются через соцсеть, Django автоматически создаст нового пользователя в базе данных (если его там ещё нет). Это как супергерой, который получает доступ в вашу базу данных и создает там своего персонажа.

Чтобы управлять этим процессом, используется pipeline. Вот его стандартная конфигурация в settings.py:

SOCIAL_AUTH_PIPELINE = (
'social_core.pipeline.social_auth.social_details',
'social_core.pipeline.social_auth.social_uid',
'social_core.pipeline.social_auth.auth_allowed',
'social_core.pipeline.social_auth.social_user',
'social_core.pipeline.user.get_username',
'social_core.pipeline.user.create_user',
'social_core.pipeline.social_auth.associate_user',
'social_core.pipeline.social_auth.load_extra_data',
'social_core.pipeline.user.user_details',
)

Этот pipeline позволяет обрабатывать все этапы авторизации: от получения данных о пользователе до его создания в базе данных.

Редиректы после авторизации в Django

После успешной авторизации пользователя нужно куда-то перенаправить. Для этого настроим переменную LOGIN_REDIRECT_URL в settings.py:

LOGIN_REDIRECT_URL = '/'

Теперь, когда пользователь войдет через ВКонтакте, Яндекс или Google, его отправят на главную страницу или туда, куда вам нужно.

Ошибки авторизации django (что делать, если соцсеть подводит?)

Иногда всё может пойти не по плану: соцсеть не отвечает, ключи просрочились, интернет отвалился. В таких случаях нужно уметь обрабатывать ошибки. Вы можете настроить URL для ошибок входа:

LOGIN_ERROR_URL = '/login-error/'

Создайте шаблон для этой страницы, где вы с юмором объясните пользователю, что что-то пошло не так. Например: “Упс! Кажется, ВКонтакте решил сегодня вздремнуть. Попробуйте ещё раз!”

Кастомизация (сделайте ваше приложение ещё круче)

Когда базовая настройка готова, можно подумать о кастомизации. Например, вы можете добавить шаг, в котором после входа через соцсеть пользователь должен заполнить недостающие данные (например, дату рождения или любимый цвет супергеройского костюма). Также можно добавить свои шаги в pipeline, чтобы проверять уникальные условия.

Заключение

Теперь вы знаете, как настроить авторизацию через соцсети ВКонтакте, Яндекс и Google в Django. Это делает ваше приложение более удобным и современным для пользователей, ведь никто не любит заполнять скучные формы. Используя соцсети для аутентификации, вы не только экономите время пользователей, но и добавляете вашему проекту немного супергеройского блеска.

Поделится