Evgenii Legotckoi
Evgenii Legotckoi16 липня 2018 р. 03:15

Django - Підручник 037. Як додати аутентифікацію через соціальні мережі. Google+

Другою соціальною мережею, через яку можна буде автентифікуватись на сайті, буде Google+.

Я не буду вдаватися до всіх подробиць налаштування та встановлення батарейки Python Social Auth Django, оскільки про це було розказано в попередній статті . Але зазначу, що цього разу підключення зайняло лише півгодини.

Однак налаштування доступу через API Google було більш складним, ніж для VKontakte.


settings.py

По-перше, потрібно прописати новий бекенд, який відповідатиме за аутентифікацію через Google+.

AUTHENTICATION_BACKENDS = (
    ...
    'social_core.backends.google.GoogleOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

По-друге, необхідно прописати змінні для ключа API і секретного ключа

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'XXXXXXXX'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'XXXXXXXXX'

Налаштуйте програму в консолі Google API

А тепер розберемося, як настроїти програму в Google API Console для отримання можливості автентифікувати користувачів на сайті завдяки соціальній мережі Google+.

Крок 1 - створити проект

Крок 2 - Включити Google+ API

Після того, як ваш проект буде створено, потрібно буде підключити відповідний API, а саме Google+ API.

Переходимо до розділу Увімкнути API та Сервіси

Знаходимо Google+ API та включаємо його

Крок 3 - Створити програму веб-сайту у вашому проекті

Потрібно перейти до розділу облікових даних та в комбобоксі створення облікових даних користувача вибрати пункт ідентифікатор клієнта OAuth.

Із запропонованих варіантів вибирайте Веб-програму.

Крок 4 - налаштування сторінки запиту на облікові дані

Тут буде запропоновано вибрати ваш e-mail. як розробника, можна додати і якийсь інший.

Далі назва продукту.

І URL головної сторінки вашого сайту, решта за бажанням

Крок 5 - налаштування доступу програми до Google+ API

На відміну від VKontakte, у випадку з Google+ API контролюється ретельніше, звідки надходить запит, і куди користувач перенаправляється у разі успішної авторизації. Тут і криється один нюанс налаштування.

Ось у цих налаштуваннях і знаходяться необхідні нам ключики

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'Идентификатор клиента'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'Секрет клиента'

Далі джерела та перенаправлення.

У дозволені джерела потрібно надавати адресу вашого сайту, наприклад

https://example.com

А ось дозволені URI перенаправлення мають на увазі, куди має бути перенаправлений користувач у разі успішної автентифікації. І тут потрібно врахувати, як у вас підключено модуль соціальної автентифікації на сайті. У моєму випадку він підключений до коріння сайту, тому виходить ось така адреса

http://example.com/complete/google-oauth2/

Якщо це не прописати, то автентифікація не працюватиме справно, оскільки Google+ API не дозволить користувачеві успішно перейти на ваш сайт з автентифікаційними даними.

Шаблон

У шаблоні можна додати подібний код для отримання іконки з url авторизації

<a href="{% url 'social:begin' 'google-oauth2' %}"><img src="/static/lgoogle.png" class="avatar-3" data-toggle="tooltip" title="{% trans 'Login via Google+' %}"></a>

Аутентифікація користувача з різних соціальних мереж

Також може виникнути проблема визначення користувача, якщо він входить в обліковий запис на сайті, використовуючи різні соціальні мережі, наприклад сьогодні він зайшов через ВКонтакті, а завтра скористається Google+.

Тоді, щоб не з'являлося кілька акаунтів одного користувача, необхідно перевіряти інформацію про користувача, який автентифікується за допомогою соціальної мережі, і якщо він раніше заходив на сайт за допомогою іншої соціальної мережі, то зв'язати його автентифікацію з раніше створеним акаунтом.

Ця перевірка включається до Python Social Auth Django одним налаштуванням.

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.associate_by_email',
)

В даному випадку використовується інформація про email користувача

Для Django рекомендую VDS-хостинг TIMEWEB

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Владислав Меленчук
  • 29 липня 2021 р. 02:49

Какую ссылку в гулге юзать для редиректа oauth2?

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84бали,
  • Рейтинг балів4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42бали,
  • Рейтинг балів-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47бали,
  • Рейтинг балів-6
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Дмитрий
Дмитрий03 лютого 2025 р. 06:24
Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
NW
Nayo Wai30 січня 2025 р. 09:22
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
n
nkly03 січня 2025 р. 02:52
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
M
Marsel16 серпня 2023 р. 14:26
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.

Слідкуйте за нами в соціальних мережах