Установка библиотеки
В качестве первого шага мы должны установить и включить библиотеку social-auth-app-django в нашем проекте django. Мы можем установить эту библиотеку, используя pip или pipenv в соответствии с нашей средой/личными предпочтениями.
Если мы выберем pip:
pip install social-auth-app-django
или если мы используем pipenv:
pipenv install social-auth-app-django
После того, как библиотека установлена, мы должны добавить приложение в список INSTALLED_APPS в файле настроек проекта, используя идентификатор social_django:
Добавление бэкэнда аутентификации Google OAuth2
Как упоминалось ранее, мы будем использовать учетные записи Google для установления аутентификации, поэтому нам нужно добавить бэкэнд Google OAuth2 в список бэкэндов аутентификации. Кроме того, мы должны явно включить бэкэнд аутентификации модели по умолчанию, чтобы продолжить использование сайта администратора django с использованием локальных учетных записей:
AUTHENTICATION_BACKENDS = (
'social_core.backends.google.GoogleOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
Настройка API аутентификации Google
Как только мы добавили бэкэнд, мы должны настроить его для использования в приложении. Для выполнения этой задачи мы переходим в консоль разработчиков Google и, попав туда, переходим в раздел «Учетные данные» в левом меню. Появится диалоговое окно для выбора или создания проекта. В настоящее время у нас все еще нет проектов, поэтому мы выберем второй вариант для его создания.
Теперь нам нужно выполнить следующие задачи:
- Дайте описательное имя проекту. Это поможет нам поддерживать чистоту при управлении несколькими приложениями.
- Создайте учетные данные, выбрав идентификатор клиента OAuth в меню «Создать учетные данные».
- Выберите веб-приложение и заполните необходимые данные. URI авторизованного перенаправления используются бэкэндом аутентификации Google для повторного перенаправления пользователей в приложение после выполнения аутентификации.
- Нажмите на кнопку Создать, и ключ и секрет будут сгенерированы. Нам понадобятся эти параметры на следующем шаге.
Настройка проекта на бэкэнде
Теперь пришло время настроить сервер аутентификации в нашем проекте. Мы должны отредактировать файл настроек и инициализировать ключ Google OAuth2 и секрет, используя ключи, полученные в процессе генерации учетных данных:
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'INSERT_PROVIDED_KEY_HERE'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'INSERT_PROVIDED_SECRET_HERE'
Нам также необходимо добавить ключи LOGIN_URL, LOGIN_REDIRECT_URL и LOGOUT_REDIRECT_URL в файл конфигурации. Библиотека social-app-django использует ключ LOGIN_URL, чтобы перенаправить пользователя на страницу аутентификации Google.
LOGIN_URL = '/auth/login/google-oauth2/'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
Для завершения процесса настройки нам нужно добавить несколько маршрутов:
from django.conf import settings
from django.contrib.auth.views import logout
urlpatterns = [
...,
path('', include('social_django.urls', namespace='social')),
path('logout/', logout, {'next_page': settings.LOGOUT_REDIRECT_URL},
name='logout'),
...,
]
Нам также нужно добавить следующий ключ в файл настроек:
SOCIAL_AUTH_URL_NAMESPACE = 'social'
На этом этапе конфигурация должна быть готова. Теперь пришло время внести некоторую логику в представления и шаблоны!
Добавление логики в представления и шаблоны
Как мы уже говорили ранее, мы создаем простое приложение для блога. Поведение по умолчанию здесь – показывать сообщения только при аутентификации пользователя. Мы помещаем логику, чтобы управлять этим поведением в представлении:
Configuration
Update settings.py to include/register the library in our project:
INSTALLED_APPS=('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','django_social_project','social.apps.django_app.default',)TEMPLATE_CONTEXT_PROCESSORS=('django.contrib.auth.context_processors.auth','django.core.context_processors.debug','django.core.context_processors.i18n','django.core.context_processors.media','django.core.context_processors.static','django.core.context_processors.tz','django.contrib.messages.context_processors.messages','social.apps.django_app.context_processors.backends','social.apps.django_app.context_processors.login_redirect',)AUTHENTICATION_BACKENDS=('social.backends.facebook.FacebookOAuth2','social.backends.google.GoogleOAuth2','social.backends.twitter.TwitterOAuth','django.contrib.auth.backends.ModelBackend',)
Once registered, update the database:
Update the Project’s urlpatterns in urls.py to include the main auth URLs:
Configure django allauth
Next, let’s set up Django Allauth for our Django app.
For Django Allauth to work with our Django app, update INSTALLED_APPS inside the settings.py file like so:
# social_app/settings.pyINSTALLED_APPS=["django.contrib.admin","django.contrib.auth","django.contrib.contenttypes","django.contrib.sessions","django.contrib.messages","django.contrib.staticfiles","django.contrib.sites",# new# 3rd party"allauth",# new"allauth.account",# new"allauth.socialaccount",# new# social providers"allauth.socialaccount.providers.github",# new"allauth.socialaccount.providers.twitter",# new]
First, we added the Django “sites” framework, which is required for Allauth to work properly. We then added the core Allauth apps: allauth, allauth.account, and allauth.socialaccount.
Create a new django project
Start by creating a virtual environment and installing Django:
Feel free to swap out venv and Pip for Poetry or Pipenv. For more, review Modern Python Environments.
Now create a new project, apply the migrations, and run the server:
Django allauth
Pros:
Integration examples
For each authentication provider, the top portion of your REST API settings.py file should look like this:
INSTALLED_APPS= (
...
# OAuth
'oauth2_provider',
'social_django',
'rest_framework_social_oauth2',
)
TEMPLATES= [
{
...
'OPTIONS': {
'context_processors': [
...
# OAuth
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
}
]
REST_FRAMEWORK= {
...
'DEFAULT_AUTHENTICATION_CLASSES': (
...
# OAuth# 'oauth2_provider.ext.rest_framework.OAuth2Authentication', # django-oauth-toolkit < 1.0.0
'oauth2_provider.contrib.rest_framework.OAuth2Authentication', # django-oauth-toolkit >= 1.0.0'rest_framework_social_oauth2.authentication.SocialAuthentication',
)
}
Listed below are a few examples of supported backends that can be used for social authentication.
Python social auth
Pros:
Python social auth setup
Follow the steps below and/or the official installation guide to install and setup the basic configuration.
Installation
Install with pip:
Templates
Create a new folder called “templates”, and add two files to it called _base.html and home.html:
Update TEMPLATES in settings.py so that Django knows where to find the templates:
templates/_base.html:
templates/home.html
Create a view to serve up the home.html template:
Add the new URL:
Views
Next, add the following view functions:
Вконтакте
Зайдите на страницу и нажмите Создать приложение, выберите Тип “Веб-сайт” и введите адрес сайта и имя домена. В ответ получите “ID приложения” и “Защищенный ключ”.
Добавьте их в settings.py, пример:
VK_APP_ID = '1234567' VKONTAKTE_APP_ID = VK_APP_ID VK_API_SECRET = 'Q0owlQESOXRYd2lcgnLa' VKONTAKTE_APP_SECRET = VK_API_SECRET
Краткий обзор oauth
Для обеспечения аутентификации пользователей Google поддерживает несколько протоколов, включая OAuth 2. OAuth – это открытый протокол, который обеспечивает безопасную авторизацию для веб-приложений, приложений для мобильных устройств и настольных компьютеров простым и стандартным способом.
На этой диаграмме вы можете увидеть, как это работает:
Полное руководство о том, как использовать этот протокол для доступа к API Google, доступно здесь.
В этом посте мы создадим простое приложение для блогов, использующее протокол OAuth для обеспечения аутентификации пользователей с помощью учетных записей Google.
Обновление аватарок при авторизации
В статье Django Social Auth: now with images имеется пример как через сигналы обновлять аватарку пользователю, на мой вгляд, код служит только для примера.
Регистрации в сетях
Для начала нам надо получить ключи от необходимых социальных сетей, на странице проекта в GitHub есть инструкции для множества социальных сетей, но в свое время у меня были трудности и я решил записать последовательность действий для некоторых из них.
Установка и настройка django-social-auth
Для начала установим приложение:
pip install django-social-auth
Теперь отредактируйте settings.py:
Шаблон
В шаблоне вы можете добавить подобный код для получения иконки с url авторизации
Шаг 3 – создать приложение веб-сайта в вашем проекте
Нужно перейти в раздел учётных данных и в комбобоксе
создания учётных данных
пользователя выбрать пункт
идентификатор клиента OAuth.
Из предложенных вариантов выбирайте Веб-приложение.
Шаг 4 – настройка страницы запроса учётных данных
Здесь будет предложено выбрать ваш email. как разработчика, можно добавить и какой-то иной.
Далее название продукта.
И URL главной страницы вашего сайта, остальное по желанию
Виджет для вывода кнопочек
Это просто шаблонный inclusion-тег, который выводит ссылочки в виде кнопочек-логотипов социальных сетей, выглядит примерно так:
Сам виджет я не стал публиковать в PyPI, так как не считаю это важным, вам следует просто скопировать исходники отсюда
После чего добавьте в settings.py следующий список:
Conclusion
This tutorial detailed how to set up social auth with Django and Django Allauth. You should now have a solid understanding of how to wire up new social auth providers:
Friendly views
For now, we just need two views – login and home.