В этой статье я объясню, как добавить Google OAuth 2.0 в ваш проект Django.

В этом уроке я буду использовать пакет django-allouth из-за его простоты и количества поддерживаемых провайдеров OAuth.

Давайте начнем!

Создание виртуальной среды

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

pipenv shell

Установка необходимых пакетов

Требуются следующие пакеты:

  • Джанго
  • Джанго-Аллаут
  • django-sslserver (для запуска защищенного локального хоста)

Вы можете установить пакеты, выполнив команду:

pipenv install <package-name>

Создайте новый проект Django.

После установки данных пакетов создайте новый проект django, используя django-admin:

django-admin startproject g_auth

Создать новое приложение

CD во вновь созданный каталог проекта (g_auth) и введите следующее:

python3 manage.py startapp google_login

Создайте каталог шаблонов

Настройка проекта Джанго

Перейдите в {BASE_DIR}/g_auth/settings.py и добавьте/измените следующие конфигурации:

ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #django apps (enter your app's name as in <app_folder>/apps.py)
    'google_login',
    #packages
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
]
AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
)
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': [
            'profile',
            'email',
        ],
        'AUTH_PARAMS': {
            'access_type': 'online',
        }
    }
}

Редактирование файла urls.py базового проекта

Перейдите в {BASE_DIR}/g_auth/urls.py и добавьте allauth.urls в пути.

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
]

Запустить миграцию

Перейдите в {BASE_DIR}, затем выполните:

python3 manage.py migrate

Теперь запустите:

python3 manage.py runserver

чтобы проверить, работает сервер или нет. Запишите URL-адрес и порт сервера разработки.

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

Прежде чем сделать это, нам нужно изменить псевдоним URL-адреса сервера разработки с localhost. Для этого нам нужно отредактировать файл hosts.

Редактирование файла hosts

Для окон:

  • Откройте Блокнот.exe
  • В блокноте откройте следующий файл: c:\Windows\System32\Drivers\etc\hosts

Для Linux:

  • Запустить терминал
  • запустите sudo nano /etc/hosts

Для macOS:

  • Запустить терминал
  • запустите sudo nano /private/etc/hosts

В конце файла hosts добавьте IP-адрес сервера разработки вместе с новым псевдонимом.

127.0.0.1    g-auth-demo.com

Вы можете проверить, работает ли новый псевдоним, перейдя по адресу http://g-auth-demo.com:8000 (возможно, вам потребуется перезагрузить компьютер после редактирования файла hosts)

Создание учетных данных Google OAuth

Перейдите в Google API Console и авторизуйтесь под своей учетной записью Google.

В списке проектов нажмите «Новый проект», чтобы создать новый проект Google API. Дайте проекту имя (GAuth) и оставьте местоположение «Нет организации», затем нажмите «Создать».

После создания проекта вы будете перенаправлены на панель инструментов. Перейдите в раздел Учетные данные, нажмите кнопку Создать учетные данные и выберите «Идентификатор клиента OAuth» в раскрывающемся списке.

Нажмите Настроить экран согласия.

Настройка экрана согласия

Экран согласия — это экран, который отображается пользователю при входе в систему с помощью Google.

Выберите Тип пользователя как Внешний и нажмите Далее.

Введите следующие значения в следующие поля:

  • Имя приложения: GAuth
  • Авторизованные домены: g-auth-demo.com
  • Ссылка на главную страницу приложения: http://g-auth-demo.com:8000
  • Ссылка на Политику конфиденциальности приложений: http://g-auth-demo.com:8000/policy.

Нажмите Сохранить.

Теперь снова перейдите в раздел Учетные данные -> Создать учетные данные -> Идентификатор клиента OAuth.

Выберите «Тип приложения» как Веб-приложение и дайте своему клиенту имя.

Оставьте поле Авторизованные источники JavaScript пустым.

В разделе URI авторизованного перенаправления добавьте

http://g-auth-demo.com:8000/accounts/google/login/callback/

Нажмите СОЗДАТЬ, и вы получите OAuth Client IDи Client Secret. Запишите их.

Теперь, когда у нас есть необходимые учетные данные, мы можем настроить django-allauth.

Добавить суперпользователя

Бегать

python3 manage.py createsuperuser

добавьте имя пользователя, адрес электронной почты и пароль.

Настройка джанго-админа

Запустите сервер django, затем перейдите на портал администрирования django по адресу

g-auth-demo.com:8000/admin

Войдите, используя ранее созданные учетные данные суперпользователя.

перейдите на страницу Сайты, нажмите example.com и измените домен и отображаемое имя на:

после сохранения перейдите на главную страницу –› Социальные приложения –› ДОБАВИТЬ СОЦИАЛЬНОЕ ПРИЛОЖЕНИЕ.

Введите следующие значения в следующие поля:

  • Поставщик: Google
  • Имя: логин google
  • Идентификатор клиента: ‹Идентификатор клиента, сгенерированный из консоли API›.
  • Секретный ключ: ‹Секрет клиента, сгенерированный из консоли API›\

В поле Сайты дважды щелкните http://g-auth-demo.com:8000.

Нажмите Сохранить и все!

Теперь вы можете проверить это, создав простой HTML-файл и сопоставив его с представлением.

Вы можете найти полный код с очень простым примером:

https://github.com/garganmol111/django-allauth_demo