пятница, 11 декабря 2015 г.

Авторизация через facebook в hybridauth modx

Приветствую вас, уважаемые читатели!

Сегодня боги послали мне установку модуля авторизации через социальные сети под названием HybridAuth в MODX Revo. Требовалось настроить доступ через две популярные соц.сети - Facebook и Вконтакте.

Итак, сниппет вставлен, количество иконок сокращено до двух. Пришло время получать ключи приложений. Регистрация как разработчик в этих сетях прошла успешно. Вконтакте настроилось сразу по имеющейся документации. Facebook предварительно тоже не подавал никаких признаков капризности и брыкания, хотя документация к установке устарела и пришлось вводить параметры интуитивно. Кнопка like в виде пробного кода вставилась и успешно заработала. Пришло время настройки приложения HybridAuth.
Тут с facebook начались проблемы.
При нажатии на кнопку авторизации "f" вылезла ошибка:
Given URL is not whitelisted in Client OAuth Settings.
После прочтения отзывов в магазине приложений, и различных форумов, попыток ввести адреса с различными префиксами и ключами итог был один - та же самая ошибка. Затем я плюнул и решил попробовать вставить голый адрес сайта - http://sitename.com. (хотя чуть позже нашел на одном сайте шаблон заполнения такой http://mywebsite.com/path_to_hybridauth/?hauth.done=Facebook)

Тыдыщ - ошибка исчезла. Правда появилась другая.
Invalid Scopes: read_stream
Социальная сеть Facebook часто обновляет свой API и поэтому могут возникать такие ошибки. Как оказалось в дальнейшем, параметр который запрашивал сниппет HybridAuth был относительно недавно (пол года назад) переименован. Параметр этот отвечает за чтение ленты пользователя и мне триста лет не нужен.

Дай думаю гляну что HybridAuth вообще запрашивает. Мне достаточно пока имени и почтового ящика. Открыл файл

/core/components/hybridauth/model/hybridauth/lib/Providers/Facebook.php

который отвечает за работу с Facebook и увидел список голубчиков:
public $scope = "email, user_about_me, user_birthday, user_hometown, user_location, user_website, read_stream, publish_actions, read_custom_friendlists";
Недолго думая решил удалить виновника торжества - read_stream из списка (к тому же это прямым текстом разрешается и приветствуется в комментарии к коду пару стручками выше:
* default permissions, and a lot of them. You can change them from the configuration by setting the scope to what you want/need
Обновляем страницу сайта с кнопками авторизации, пробуем нажать на "f" - тадамс, ошибок нет, проходим на следующий уровень.

Теперь уже все запрашиваемые параметры годны, запросить их у пользователя можно, но большинство из них не авторизовано данной соц.сетью для этого приложения. Предлагается провести проверку приложения в целом на соответствие необходиомсти всех этих запросов.
Но уже хорошо, видна кнопка confirm. После подтверждения все работает. Мисиия выполнена.

Думаю, кучу всех этих лишних параметров можно смело удалять, а оставить только 2 основных - email и public_profile. Остальное ликвидировать из сниппета.
Но это, возможно, опишем в следующей статье. Спасибо за внимание)

2 комментария: