Работая над 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.