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

Комментарии (6)


  1. askurashev
    23.06.2025 08:38

    Советую django-allauth, поддерживающий множество провайдеров, в том числе и Google.


    1. advanced_python_expert Автор
      23.06.2025 08:38

      попробуем. Вопрос, сохраняется ли работоспособность этой штки в наши дни? Студенты писали, что существующие руководства по ней - нерабочие, но будем изучать, смотреть


      1. askurashev
        23.06.2025 08:38

        Очень даже работоспособна. В репозитории последние изменения позавчерашние.

        Официальная документация — лучшее руководство и рабочее.


        1. advanced_python_expert Автор
          23.06.2025 08:38

          принял, будем тестить


      1. 4wards1
        23.06.2025 08:38

        В голове не укладывается: вы "advanced python expert", у вас есть какая-то армия студентов, слушающих вас с раскрытым ртом, пишете "обучающие" статьи, но при этом вы вообще не знакомы с де-факто основной библиотекой для аутентификации в Django?

        То ли смеяться, то ли плакать. Дальше, наверное, будут туториалы по FastAPI, где в комментариях вы узнаете о существовании Pydantic, а потом туториалы по aiogram, где комментаторы познакомят вас с magic filters.

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


        1. advanced_python_expert Автор
          23.06.2025 08:38

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