Как в 2025 году в Django реализовать аутентификацию через Google

от автора

Работая над Django-проектом, мы с подписчиками моего канала решили настроить вход пользователя через этот популярный сервис и оказалось, что настройки, которые мы применяли несколько лет назад, теперь не работают, и нужно восстановить новый рабочий алгоритм. Он получился и выглядит следующим образом.

ВЫПОЛНЯЕМ УСТАНОВКУ БИБЛИОТЕКИ АУТЕНТИФИКАЦИИ И НАСТРОЙКУ ПРОЕКТА

Аутентификация через сторонние сервисы осуществляется на базе протокола OAuth 2.0, который поддерживается библиотекой Python Social Auth Django.

Для начала нам нужно установить библиотеку social-auth-core и дополнительную библиотеку social-auth-app-django для интеграции этой системы регистрации/аутентификации в Django. Оба компонента мы указали в списке зависимостей проекта в файле requirements.txt:

social-auth-app-django==5.0.0 social-auth-core==4.1.0

Зависимости привычным путем устанавливаем из терминала в активированное виртуальное окружение командой:

pip install -r requirements.txt

Подключим установленное приложение к проекту черещ модуль settings.py:

INSTALLED_APPS = [     …     'social_django', ]

Поскольку представленная библиотека поддерживает собственные таблицы для работы с аутентификацией пользователя, необходимо выполнить соответствующие миграции:

python manage.py migrate

Результат:

Если учетная запись администратора у вас отсутствует, можно создать админа командой (указав в качестве логина и пароля, например, строку admin):

python manage.py createsuperuser

Далее необходимо настроить бэкенды аутентификации. Для этого в модуль settings.py добавим константу со значением:

AUTHENTICATION_BACKENDS = (     'social_core.backends.google.GoogleOAuth2',     'django.contrib.auth.backends.ModelBackend', )

Параметр:

'social_core.backends.google.GoogleOAuth2'

Соответствует бэкенду аутентификации посредством Google.

Параметр:

'django.contrib.auth.backends.ModelBackend',

Представляет собой бэкенд привычной аутентификации через классические логин и пароль.

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

Кроме того, нужно правильно указать настройку шаблонизации в модуле settings.py:

TEMPLATES = [     {      …         'OPTIONS': {             'context_processors': [             …                                         'social_django.context_processors.backends',         'social_django.context_processors.login_redirect',             ],         },     }, ]

Теперь требуется подключить соответствующие служебные маршруты для аутентификации.

Добавим в модуль urls.py главного пакета проекта такую привязку:

urlpatterns = [     …     path('oauth/', include('social_django.urls', namespace='social')), ]

Также добавим в модуль settings.py константы:

SOCIAL_AUTH_URL_NAMESPACE = 'social' LOGIN_REDIRECT_URL = '/'

Далее добавим в интерфейс проекта кнопку для аутентификации через Google.

Добавим в шаблон login.html приложения authapp:

<button class="btn btn-round form-control">     <a href="{% url 'social:begin' 'google-oauth2' %}">         Вход через Google     </a> </button>

ВЫПОЛНЯЕМ НАСТРОЙКУ КЛЮЧА И СЕКРЕТА ДЛЯ АУТЕНТИФИКАЦИИ

Перейдем по ссылке и зарегистрируем приложение:

Перейдем по ссылке и создадим идентификатор клиента OAuth:

Нажимаем CONFIGURE CONSENT SCREEN:

Нажимаем Get Started:

Вводим название приложения и почту:

Далее выбираем External и подтверждаем:

Далее переходим вновь в раздел Credentials:

Переходим к созданию приложения:

Выбираем создание веб приложения, указываем имя и адрес перенаправления http://127.0.0.1:8000/oauth/complete/google-oauth2/:

Теперь копируем ключ и секрет:

И укажем их в модуле settings.py:

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '847071034656-qeeuus2sh5u6qs3vtodvven2u9pq2c36.apps.googleusercontent.com'  SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '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'

ВЫПОЛНЯЕМ ЗАПУСК

Если сейчас выполнить запуск нашего проекта:

python manage.py runserver

И перейти на страницу аутентификации, можно увидеть на форме аутентификации новую кнопку.

Теперь можно успешно выполнить вход через Google.

P.S. Я создал небольшой Django-проект, на котором вы можете проверить работоспособность механизма. Скачать его можно здесь, но обязательно прочитайте файл readme для избежания ошибок. Успешной настройки аутентификации пользователя через Google! А в следующей статье рассмотрим решение задачи заполнения профиля пользователя в Django-проекте данными из учетной записи в Google.


ссылка на оригинал статьи https://habr.com/ru/articles/920868/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *