В этой статье мы разберём, как делается на Django авторизация через социальные сети, делать это будем с помощью специальной библиотеки Social Auth’s.
Ещё можете посмотреть статью: Как сделать регистрацию на Django, думаю вам будет интересно.
Также стоит сказать, что эта статья по сути перевод старта этой библиотеки, в самом конце будет ссылка на всё документацию.
Установка:
Для установки используем pip, то есть как обычный пакет:
1 | pip install social-auth-app-django |
После этого как обычную библиотеку в Django добавляем в список INSTALLED_APPS
:
1 2 3 4 5 | INSTALLED_APPS = [ ... 'social_django', ... ] |
Теперь делаем миграции:
1 | manage.py migrate |
Ещё для удобства для хранения данных авторизации лучше использовать JSON объект, для этого в настройки нужно добавить такую строчку:
1 | SOCIAL_AUTH_POSTGRES_JSONFIELD = True |
После этого можете работать с библиотекой.
Для MongoEngine:
Ещё стоит упомянуть, если вы используете MongoEngine, вам нужно другую версию библиотеки скачать, но в остальном всё также, вот что вписываем:
1 | pip install social-auth-app-django-mongoengine |
Точно также добавляем эту версию в INSTALLED_APPS
:
1 2 3 4 5 | INSTALLED_APPS = [ ... 'social_django_mongoengine', ... ] |
Также для работы библиотеки с использованием MongoEngine, нужно добавить в «setting.py», переменную SOCIAL_AUTH_STORAGE
:
1 | SOCIAL_AUTH_STORAGE = 'social_django_mongoengine.models.DjangoStorage' |
Тут вам не надо делать миграции.
Основы создания авторизации:
Теперь разберём как делается авторизация с использованием этой библиотеки, сделать это можно очень просто и быстро.
Также стоит сказать, что здесь не будет подробно описывать как сделать авторизацию через Google или Вконтакте, а скорее просто показа базовых настройка и компонентов.
Первым делом вам нужно подключить компоненты для авторизации через нужные нам социальные сети, их добавим в список AUTHENTICATION_BACKENDS
, который находиться во файле «setting.py»:
1 2 3 4 5 6 | AUTHENTICATION_BACKENDS = [ 'social_auth.backends.facebook.FacebookBackend', 'social_auth.backends.contrib.vk.VKOAuth2Backend', 'social_auth.backends.google.GoogleOAuth2Backend', 'django.contrib.auth.backends.ModelBackend', ] |
Как можете заметить, мы тут подключили регистрацию через FaceBook, Вконтакте и Google, в конце стандартная авторизация Django, теперь там же добавляема настройки для этих социальных сетей:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Настройки для Facebook FACEBOOK_APP_ID = 'app_id' FACEBOOK_API_SECRET = 'secret_token' # Настройки для Вконтакте VK_APP_ID = 'app_id' VKONTAKTE_APP_ID = VK_APP_ID VK_API_SECRET = 'key_api_secret' VKONTAKTE_APP_SECRET = VK_API_SECRET # Настройки для Google GOOGLE_OAUTH2_CLIENT_ID = '123456789.apps.googleusercontent.com' GOOGLE_OAUTH2_CLIENT_SECRET = 'key_secert' |
То есть тут нам нужны только ключи для работы с API социальных сетей, так же есть дополнительные настройки, которые вы тоже можете использовать.
- social_details — Получаем информацию о пользователе и возвращаем ее в простом формате для создания экземпляра пользователя. В некоторых случаях это уже являются частью ответа авторизации, но иногда это может попасть в API социальной сети;
- social_uid — Получаем уникальный идентификатор из социальной сети;
- auth_allowed — проверяет, что текущий процесс аутентификации действителен в текущем проекте, проверяет белые списки электронной почты;
- social_user — Проверяет, связана ли уже текущая учетная запись социальной сети с сайтом;
- get_username — Придумывает новое имя пользователя, на основе имеющихся данных;
- create_user — Создают учетную запись пользователя, если еще её нету;
- associate_user — Создают запись, которая связывает существующую учетную запись со социальной сетью этого пользователя;
- extra_data — Получает и обновляет social_user.extra_data;
- user_details — Обновляет данные пользователя;
- associate_by_email — Связывает текущую авторизацию с пользователем с таким же адресом электронной почты в БД;
Их все можно применить в настройках, в списке SOCIAL_AUTH_PIPELINE
, вот пример:
1 2 3 4 5 6 7 8 9 10 11 | SOCIAL_AUTH_PIPELINE = [ 'social_core.pipeline.social_auth.social_details', 'social_core.pipeline.social_auth.social_uid', 'social_core.pipeline.social_auth.social_user', 'social_core.pipeline.user.get_username', 'social_core.pipeline.social_auth.associate_by_email', 'social_core.pipeline.user.create_user', 'social_core.pipeline.social_auth.associate_user', 'social_core.pipeline.social_auth.load_extra_data', 'social_core.pipeline.user.user_details', ] |
Осталось совсем не много, теперь нужно в «urls.py», прописать URL для авторизации, вот как это делается:
1 2 3 4 5 | urlpatterns = [ ... path('social-auth/', include('social_django.urls', namespace="social")), ... ] |
Ещё в настройки шаблонов добавляем пару строчек, находиться они в «setting.py»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'social_django.context_processors.backends', # add this 'social_django.context_processors.login_redirect', # add this ], }, }, ] |
После этого в шаблоне можем использовать, например такую запись:
1 | <a href="{% url "social:begin" "google-oauth2" %}">Google+</a> |
Таким образом, мы сделали авторизацию через социальные сети.
Вывод:
В этой статье вы прочитали, как сделать авторизацию через социальные сети на Python Django, использовав для этого специальную библиотеку, если хотите узнать о ней подробнее, то почитайте документацию.