Настройка HybridAuth Social Login

Модуль HybridAuth позволяет использовать авторизацию на сайте для большинства популярных соц. сетей с использованием OAuth (OAuth2) и OpenID.

 

Оглавление
  1. Описание
  2. Настройка модуля
  3. Конфигурация API социальных провайдеров
    1. Google
    2. Facebook
    3. Twitter
    4. Yahoo!
    5. Windows Live
    6. D​isqus
    7. Yandex
    8. Mail.ru
    9. ВКонтакте VKontakte
    10. Оdnoklassniki.ru
  4. Список ошибок
  5. Дополнительная информация
  6. Мультиязычный || мультидоменный сайт. Настройка API првайдеров (OAuth).
Информация обновлена на январь 2016.
HybridAuth Social Login: 7.x-2.142015-Oct-27 ♦

HybridAuth library: HybridAuth 2.6.0-dev

Описание

Hybridauth is an Open source social sign on PHP Library. The main goal of HybridAuth is to act as an abstract api between your application and various social apis and identities providers such as Facebook, Twitter, MySpace and Google.

Рейтинг почтовых сервисов

На 2012 г. рейтинг среди бесплатных почтовых сервисов распределяется следующим образом

  1. GMail
  2. Hotmail.com - 324 млн человек
  3. Yahoo!

Если ваш сайт ориентирован и на иностранного пользователя, то вам просто необходимо активировать

  • Windows Live, поскольку в состав ее сервисов входит Hotmail.com, а это львиная доля зарубежных пользователей
  • и Yahoo!.

Библиотеки Hybridauth:

A. Настройка модуля 'HybridAuth Social Login'

  1. Для работы модуля необходима установка библиотеки.
    Ее необходимо
    1. скачать здесь https://github.com/hybridauth/hybridauth hybridauth-x.x.x.zip(tar.gz)
    2. распаковать папку архива hybridauth-x.x.x  или hybridauth-master.zip в папку /sites/all/libraries/
    3. переименовать папку /sites/all/libraries/hybridauth-x.x.x  или hybridauth-master в /sites/all/libraries/hybridauth/
  2. В разделе 'Отчет о состоянии' или в файле CHANGELOG /admin/reports/status вы можете увидеть версию установленной библиотеки HybridAuth library
  3. В разделе настройки модуля HybridAuth /admin/config/people/hybridauth, библиотеки, которых видит модуль, будут отображаться в столбце 'Доступно' как 'Да'.
    Библиотеки, которые не видит модуль как 'Нет'.
  4. Для работы дополнительных провайдеров необходимо файлы тех провайдеров, что вам нужны, добавить в папку /sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/
    Эти файлы.php (Yandex.php, Vkontakte.php, Mailru.php, Odnoklassniki.php и т.д.) находятся в том же архиве библиотеки модуля в папке additional-providers
    Пример нахождения файла Яндекса – hybridauth-master.zip\additional-providers\hybridauth-yandex\Providers\Yandex.php.
    К примеру:
    • hybridauth-x.x.x.zip(tar.gz)/hybridauth-x.x.x/additional-providers/hybridauth-mailru/Providers/Mailru.php/sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/
    • hybridauth-x.x.x.zip(tar.gz)/hybridauth-x.x.x/additional-providers/hybridauth-yandex/Providers/Yandex.php/sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/
    • hybridauth-x.x.x.zip(tar.gz)/hybridauth-x.x.x/additional-providers/hybridauth-vkontakte/Providers/Vkontakte.php/sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/
    • и т.д.
  5. После добавления дополнительных провайдеров, очистите кэш и проверьте статусы добавленных провайдеров в разделе настройки модуля HybridAuth /admin/config/people/hybridauth
    Они должны быть - 'Да'.

Внимание! При настройке работы каждого провайдера, в разделе его настроек /admin/config/people/hybridauth Authentication window settingsAuthentication window type оставить Current window. Другую опцию (New popup window, Colorbox, ...) включайте после того, как убедитесь, что аутентификация провайдера работает корректно.
Дело в том, что вы можете не увидеть ошибки (в случае не корректной работы аутентификации к.лю провайдера), к примеру в окне Colorbox.

В. Конфигурация API социальных провайдеров
для 'HybridAuth Social Login'

Для настройки работы модуля необходимо:

  1. Сделать настройки приложение API OAuth в каждой соц. сети.
  2. Ввести данные созданного приложения в админ-разделе модуля HybridAuth вашего сайта /admin/config/people/hybridauth.
    Для каждой соц.сети отдельно (по ссылке Настройки)
    • ID приложения
    • Application consumer key (приватный, пользовательский ключ)
    • Application consumer secret (секретный ключ)

Google

Настройки API на странице https://code.google.com/apis/console#access (или, старый интерфейс https://code.google.com/apis/console/b/0/?noredirect)
Идем на по этому адресу (будучи авторизованным в Гугле)

  1. Жмем  Create an OAuth 2.0 client ID...  (рис.g-1).
  2. Эта кнопка появиться если сервис (протокол) OAuth на вашем аккаунте еще не активирован.
  3. Следующее окно предложит вам ввести (рис.g-2)
    Вводимые в этом окне данные доступны для изменения (редактирования) после создания приложения.
    • название вашего приложения (оно будет отображаться пользователям при авторизации на вашем сайте) обязательно
    • логотип для вашего приложения необязательно, но желательно
    • домен вашего сайта необязательно, но желательно
  4. В следующем шаге определяем какой тип приложения вы создаете.
    Вводимые в этом окне данные доступны для изменения (редактирования) после создания приложения.
    1. Оставляем 'Web application'
    2. Your site or hostname (more options)
      1. Вводим адрес своего сайта
      2. !!! Жмем (more options)
        Нам необходимо установить 'Authorized Redirect URIs' и 'Authorized JavaScript Origins' те, которые определяются в настройках модуля HybridAuth (для Google) /admin/config/people/hybridauth/provider/Google?destination=admin/config/people/hybridauth
        При неправильном указании 'Authorized Redirect URIs' будет проявляться приведенная ниже ошибка 'redirect_uri_mismatch'
  5. Готово, жмем Create client ID
  6. В настройках модуля HybridAuth (для Google) на своем сайте /admin/config/people/hybridauth/provider/Google?destination=admin/config/people/hybridauth вводим данные сгенерированные для вашего приложения Гуглом
    1. Client ID: (в админке сайта это 'ID приложения')
    2. Client secret: (в админке сайта это 'Application consumer secret')
  7. ! В разделе API Гугла https://code.google.com/apis/console#access - APIs & auth»APIs включаем дополнительно Contacts API и Google+ API, иначе при установке последней версии библиотеки hybridauth-2.2.2 (п.A) вы получите 1)ошибку на экран при авторизации, 2)запись в журнале отчетов ошибки модуля hybridauth
    1. There was an error processing your request.
    2. Exception: User profile request failed! Google returned an invalid response. в функции Hybrid_Providers_Google->getUserProfile() (строка 83 в файле /var/www/example.com/sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/Google.php).
Create an OAuth. Create ClientID Button. Create an OAuth. Enter Branding Information. Create an OAuth. Select Application Type.
рис.g-1 рис.g-2 рис.g-3

Возможные ошибки:

  • redirect_uri_mismatch: В API Access не прописан домен вашего сайта - Redirect URIs
    или. Внимание!!! Если сайт мультиязычный, и для языковых настроек сайта (/admin/config/regional/language/configure/url) используется префикс (/ru/, /uk/, /en/,...) необходимо в настройках API перечислить варианты адресов для все языков (ну и без))
    • http:exapmle.com/hybridauth/endpoint?hauth.done=Google
    • http:exapmle.com/ru/hybridauth/endpoint?hauth.done=Google
    • http:exapmle.com/uk/hybridauth/endpoint?hauth.done=Google
    • http:exapmle.com/en/hybridauth/endpoint?hauth.done=Google
    • ...

Ошибка redirect_uri_mismatch

The redirect URI in the request: http://example.com/hybridauth/endpoint?hauth.done=Google did not match a registered redirect URI

  • На вкладке  Consent screen  вашего API не указана обязательная опция 'Product nameназвание вашего приложения

no product name

  • Дополнительная информация. Google поддерживает создание следующих типов OAuth 2.0
    • Web application: Если ваше приложение будет использоваться в веб-браузере, выбирается "Веб-приложение"/'Web application'.
    • Service accounts: Если ваше приложение использует server-to-server подключение, к примеру между приложением и Google Cloud Storage.
    • Installed applications: Если ваше приложение должно быть установлено на устройстве или компьютере (например, в системе в Microsoft Windows, Apple OS X, Apple IOS, Google Android, и так далее).

Facebook

Настройки API на странице https://developers.facebook.com/apps

  1. Жмем  + Add a New App 
  2. выбираем WWW Веб-сайт
  3. жмем Skip and Create App ID
  4. во всплываюшем окне (Create a New App ID) вводим
    1. Display Name
    2. Namespace
    3. Is this a test version of another app?
    4. Категория
    5. жмем  Create AppID 
  5. проходим каптча-верификацию
  6. Settings»Basic
    1. В созданном приложении забираем для конфигурации на нашем сайте (/admin/config/people/hybridauth/provider/Facebook) значения
      1. App ID
      2. App Secret
    2. ! Жмем ниже вкладку + Add Platform
      1. В пункте Site URL: http://example.com/
      2. в пункте выше App Domains: example.com
  7. В закладке Settings»Advanced желательно прописать Valid OAuth redirect URIs http://example.com/hybridauth/endpoint?hauth.done=Facebook
  8. Идем в закладку (слева) Status & Review и включаем приложение (если оно отключено). Пункт "Do you want to make this app and all its live features available to the general public?"
    Активация приложения будет не доступна, если у вас не прописан Settings»Basic»Contact Email.

Возможные ошибки:

  • Указанный URL-адрес не разрешен конфигурацией приложения: Один или несколько из указанных URL-адресов заблокированы настройками приложения. Адрес должен совпадать с адресом веб-сайта или Холста, или же домен должен являться поддоменом одного из доменов приложения.

    Скорее всего вы не добавили + Add Platform (п. 6.2)
  • Invalid Scopes: offline_access. This message is only shown to developers. Users of your app will ignore these permissions if present. Please read the documentation for valid permissions at: https://developers.facebook.com/docs/facebook-login/permissions

    Для избавления от этой ошибки отключите пункт offline_access в Расширенных настройках провайдера вашего сайте (/admin/config/people/hybridauth/provider/Facebook).
    Опция offline_access уже исключена в настройках Facebook у версии модуля HybridAuth Social Login выше 7.x-2.9.
  • Возможна ошибка, когда окно авторизации не выдает никаких сообщений, но в системном журнале появляется запись:
    Exception: Authentication failed! Facebook returned an invalid user id. in Hybrid_Auth::initialize() (line 153 of .../sites/all/libraries/hybridauth/hybridauth/Hybrid/Auth.php).
    • причина и решение проблемы пока не найдены.

TwitterTwitter. Create an OAuth new application. (My applications)

  1. Авторизируемся Twitter.com
  2. Идем по адресу https://dev.twitter.com/apps
  3. Жмем 'Create a new application' https://dev.twitter.com/apps/new
  4. Заполняем форму
    1. Twitter. Create an OAuth application (OAuth settings)Name: вводим название, к примеру: Example Authorization
    2. Description: к примеру 'Example Authorization using HybridAuth'
    3. Website: вводите адрес вашего сайта
    4. Сохраняете и вводите данные приложения по пункту B.2

Yahoo!

  1. Авторизируемся на Yahoo.com
    Если нет аккаунта Yahoo, его можно не создавать, а войти, используя аккаунт Google или FaceBook
  2. Идем по адресу http://developer.yahoo.com/oauth/
  3. Идем по ссылке Get an API Key https://developer.apps.yahoo.com/dashboard/createKey.html
  4. Заполняем форму
    1. Application Name: вводите название
    2. Application Type: web-based
    3. Description: Внимание! Что-либо ввести надо обязательно и не использовать слово 'Yahoo'.
    4. Home Page URL: http:exapmle.com
    5. Access Scopes: public APIs
    6. Contact Information
  5. Со страницы https://developer.apps.yahoo.com/projects заходите в новоиспеченное приложение
  6. Вводим данные приложения по пункту B.2
    • Application ID (вводить не надо)
    1. Application consumer key: Consumer Key
    2. Application consumer secret: Consumer Secret
  7. В дальнейшем, список приложений можно найти на https://developer.apps.yahoo.com/projects

Возможные ошибки:

  • Notice: Undefined index: oauth_token в функции OAuth1Client->requestToken() (строка 84 в файле
    /var/www/example.com/sites/all/libraries/hybridauth/hybridauth/Hybrid/thirdparty/OAuth/OAuth1Client.php).
  • Notice: Undefined index: oauth_token_secret в функции OAuth1Client->requestToken() (строка 84 в файле
    /var/www/example.com/sites/all/libraries/hybridauth/hybridauth/Hybrid/thirdparty/OAuth/OAuth1Client.php).

При первой авторизации (регистрации) через кнопку Yahoo в окне приложения запрашивается ввод E-mail адреса.
Т.е почему-то Yahoo не дает почтовый ящик.

Required information
Please fill in additional information to complete your registration

Windows Live обновлено Dec 2015

  1. Авторизируемся на Live.com
  2. Дополнительно смотрим информацию по регистрации нового приложения https://msdn.microsoft.com/ru-ru/library/ff751474.aspx.
  3. Идем по адресу https://account.live.com/developers/applications.
    • Если на этом аккаунте у вас уже были созданы приложения, то вам мо этому адресу (и по https://account.live.com/developers/applications/index) будет выведен их список и параметры.
    • Если же вы еще не создавали никаких API – будет предложено ввести имя нового приложения.
  4. Вводим ‘Имя приложенияпримеру: Example Authorization, выбераем ‘Язык’ и жмем кнопку  Я принимаю .Windows Live. Create an OAuth (API Settings)
  5. Домен перенаправления: обязательно вводим домен вашего сайта
    Если не будет указан домен вашего сайта, пользователю (при авторизации) будет выводиться ошибка

    Не удалось выполнить запрос
    В учетной записи Майкрософт возникли технические проблемы. Повторите попытку позже.


D​isqus

  1. Авторизуемся на Disqus.com
  2. Жмем ссылку registering an application
  3. Заполняем поля: (все поля обязательны для заполнения)
    1. Label: (название приложения, к примеру: Example Authorization)
    2. Description: (произвольное описание)
    3. Organization: (произвольное название вашей организации)
    4. Website: (url вашего сайта)
  4. После регистрации приложения, вы увидите сообщение

    Your application has been registered!

  5. Продолжаем заполнять поля:
    1. Domains: (домен вашего сайта)
    2. Callback URL: http://example.com/hybridauth/endpoint?hauth.done=Disqus
      Замечание: Если в вас мультиязычный сайт с префиксами языков http://example.com/en/, http://example.com/uk/, http://example.com/ru/, и т.д., в Callback URL прописываем без префиксов языков (как в пункте выше). Иначе API будет работать только в том языковом разделе сайта, префикс которого вы укажите, а на авторизации по адресу с другим префиксом получаем ошибку

      Disqus
      Invalid Request: Invalid parameter: redirect_uri (domain is not permitted)

  6. Заполняем данные в на нашем drupal-сайте /admin/config/people/hybridauth/provider/Disqus?destination=admin/config/people/hybridauth
    1. ID приложения: берем API Key в закладке ‘Details’ вашего новосозданного API Disqus
    2. Application consumer key (оставляем пустым)
    3. Application consumer secret: берем API Secret в закладке ‘Details’ вашего новосозданного API Disqus

В дальнейшем, ваше приложение вы можете найти по адресу https://disqus.com/api/applications/


Yandex /Яндекс

Для конфигурации подключения модуля к API Яндекса необходимо присутствие в папке /sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/ файла Yandex.php

Настройка OAuth-авторизации на Яндекс

  1. авторизуемся на Яндексе
  2. заходим на https://tech.yandex.ru/oauth/, изучаем
  3. Настройки на https://oauth.yandex.ru
    Жмем ‘Зарегистрировать новое приложение’ https://oauth.yandex.ru/client/new.
    1. вводим Название*: любое название, к примеру - 'Авторизация на example.com'.
      Оно будет выводиться в месте окне авторизации пользователя на вашем сайте.
    2. устанавливаем Права*:
      • Яндекс.Логин
        Адрес электронной почты
        Дата рождения
        Имя пользователя, ФИО, пол
    3. прописываем Callback URI: http://example.com/hybridauth/endpoint?hauth.done=Yandex
      • внимание!!! - example.com заменить вашим сайтом
    4. Сохраняем данные и видим на странице https://oauth.yandex.ru/client/номер-вашего-приложения Id приложения, Пароль приложения.
  4. Переходим в админ-раздел своего сайта /admin/config/people/hybridauth. В Настройки (для Яндекса) вводим эти (п.4) данные:
    1. ID приложения
    2. Application consumer secret
    • Application consumer key вводить не нада. да и нету))
  • В дальнейшем список приложений можно найти на https://oauth.yandex.ru/client/my (предварительно авторизоваться).

Вожможные ошибки

  • 400
    redirect_uri не совпадает с Callback URL указаным при регистрации приложения
    • не правильно прописан Callback URL

Mail.ru

  1. Для конфигурации подключения модуля к API Яндекса необходимо присутствие в папке /sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/ файла Mailru.php
  2. Настройка OAuth-авторизации на Mail.ru
    1. авторизуемся на Mail.ru
    2. раздел 'САЙТЫ' http://api.mail.ru/sites/
    3. раздел 'Подключить сайт' http://api.mail.ru/sites/my/add/
    4. заполняем 'Информация о сайте'
      1. Название
      2. Адрес главной страницы
    5. В дальнейшем, подключенные сайты можно просмотреть в пункте 'Мои сайты' http://api.mail.ru/sites/my/
    6. Вводим данные сайта (ID, Приватный ключ, Секретный ключ) по пункту B.2

Возможные ошибки при авторизации через Mail.ru (и при регистрации нового пользователя/идентификакота, и при следующих авторизациях существующего пользователя):

  • Notice: Undefined offset: 2 в функции Hybrid_Providers_Mailru->getUserProfile() (строка 54 в файле
    /var/www/example/example.com/sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/Mailru.php).
  • Notice: Undefined offset: 1 в функции Hybrid_Providers_Mailru->getUserProfile() (строка 54 в файле
    /var/www/example/example.com/sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/Mailru.php).

ВКонтакте /VKontakte

  1. Для конфигурации подключения модуля к API Яндекса необходимо присутствие в папке /sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/ файла Vkontakte.php
  2. Настройка OAuth-авторизации на VKontakte.ru
    1. авторизуемся на VK.com
    2. идем на http://vk.com/dev
    3. раздел Создать приложение http://vk.com/editapp?act=create
      1. заполняем Название
      2. выбираем Веб-сайт
    4. Вводим данные сайта (ID, Приватный ключ, Секретный ключ) по пункту B.2

Возможные ошибки:

  • Uncaught exception thrown in session handler.
  • В дальнейшем список приложений можно найти на https://vk.com/apps?act=manage (предварительно авторизоваться).

Одноклассники

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

  1. Заполняете:
    1. Имя, фамилия: HybridAuthorization Login (или что другое))
    2. URL
    3. Логин на Одноклассники.ru
    4. Ваш адрес эл.почты
  2. Вам приходит почтой сообщение

    Добрый день!
    Вам предоставлены права разработчика на сайте Одноклассники.ру, зарегистрируйте пожалуйста приложение согласно инструкции (http://dev.odnoklassniki.ru/wiki/pages/viewpage.action?pageId=19826624 ).
    Информация об OAuth - http://dev.odnoklassniki.ru/wiki/pages/viewpage.action?pageId=12878032 В случае, если Вам необходим valuable access - отпишите пожалуйста, для каких целей, а также предоставьте shortname зарегистрированного приложения.
    С уважением,
    Команда разработчиков Odnoklassniki.ru

  3. Вы заходите по указанным ссылкам... и оказывается, что вам можно было и не париться (п.1, п.2) поскольку эти ссылки итак открыты (и без авторизации на Одноклассниках)).
    Итак, для регистрации приложения
    1. Откройте раздел Игры
    2. Справа в меню должен быть линк "Мои загруженные"
    3. При клике на Мои загруженные откроется раздел с вашими ранее зарегистрированными приложениями
    4. Жмем "Добавить приложение". Выбираем внешнее приложение.
    5. Заполняем форму
    6. Получаем на e-mail (привязанные к аккаунту) сообщение типа
      Здравствуйте, Товарищчь!
      Ваше приложение HybridAuthorization Login успешно зарегистрировано на Odnoklassniki.ru.
      Application ID: 184311471.
      Публичный ключ приложения: VBAFIGGMABHBWBABA.
      Секретный ключ приложения:  7GAA6T59A4YE6S0H22BEFB29.
      Ссылка на приложение: http://www.odnoklassniki.ru/games/example
      Этот ключ необходим для изменения настроек приложения и для подписи/верификации запросов от Вашего приложения. Более подробная информация содержится в документации к программному :-| интерфейсу сайта Odnoklassniki.ru.
      --
      С уважением,
      Служба поддержки Odnoklassniki.ru
    7. Вводим эти данные (п.6) по пункту B.2

Баги API-OAuth-Odnoklassniki.ru: (в текущее время не не выяснено как с ними бороться)

  • При первой авторизации (регистрации) через кнопку Odnoklassniki
    1. В окне приложения запрашивается ввод E-mail адрес
      Please fill in additional information to complete your registration
    2. Вываливается куча ошибок из скрипта /libraries/hybridauth/hybridauth/Hybrid/Providers/Odnoklassniki.php
      Более подробная информация здесь https://drupal.org/node/1909354

Другими словами - API Odnoklassniki.ru не предоставляет почтовый ящик пользователя!!! Даже если пользователь вводит почтовый ящик (e-mail), и жмет далее, получается обычная (drupal) регистрация пользователя по этому ящику (а не регистрация-авторизация через Odnoklassniki.ru)

Список ошибок

  • При отсутствии файлов по п.A.2 (выше) при авторизации на вашем сайте будет выводится сообщение:
    Fatal error: require_once() [function.require]: Failed opening required
    '/var/www/xxxxx/example.com/sites/all/libraries/hybridauth/hybridauth/Hybrid/Providers/Mailru.php' (include_path='./:/') in
    /var/www/xxx/example.com/sites/all/libraries/hybridauth/hybridauth/Hybrid/Provider_Adapter.php on line 79
  • Если соц. сеть активирована для регистрации, но не прописаны параметры по п.B.2
    There was an error processing your request.
  • при отсутствии значения Callback URI у API-Яндекса (п.B.3.3 выше) окно авторизации через Яндекс будут выводить
    Ошибка 400
    redirect_uri_mismatch

Дополнительная информация