Добавляем в Bitrix авторизацию через Strava Коротенькая история, как добавить в 1C-Битрикс:Управление сайтом авторизацию через Strava. Добавляем в Bitrix авторизацию через Strava Добавляем в Bitrix авторизацию через Strava

Коротенькая история, как добавить в 1C-Битрикс:Управление сайтом авторизацию через Strava.

Предисловие

Я уже несколько лет пользуюсь прекрасным трекинговым приложением Strava, и знаю, что у них есть OAuth2 авторизация, как и в других широко известных социальных сетях, но вот упростить процесс регистрации ребятам, которые уже имеют профиль атлета в Strava, всё никак руки не доходили. Хотя это было бы и логично и удобно.

Материалы по теме

Первым делом, я конечно же глянул Маркетплейс — резонное опасение, что про Strava там нет ни одного слова, оправдалось.

Никогда не хочется что-то самому выдумывать, поэтому пришлось превозмочь первую ступень лени и пойти на GitHub — обычно там есть всё. По запросу Strava нашлось аж 79 PHP-репозиториев. Много разнообразных штуковин, но ни одного слова про Bitrix.

Снова пришлось побороть лень и поискать материалы на просторах учебных курсов и блогов разработчиков 1C-Битрикс — нашлось два тематических:

Пользуясь случаем, разбавляю этот унылый текст, а заодно и хвастаюсь совместной фотографией со вторым автором.

Я и Антон Долганин на конференции

В материале Антона Долганина есть всё, кроме второй части авторизации OAuth2 с обменом code на access_token, поэтому я чуть дополню его для совсем ленивых разработчиков вроде меня.

Реализация 

Собственно, первым делом нам нужно добавить сервис Strava в список внешних сервисов на вкладке «Настройки» - «Настройки продукта» - «Настройки модулей» - «Социальные сервисы». Для этого мне понадобился класс Ambersport\Strava\Auth расширяющий \CSocServAuth.

Болванка класса Auth

Как и описано в материалах на просторах интернета, за генерацию списка отвечает событие OnAuthServicesBuildList модуля socialservices. Добавляем его в init.php или регистрируем зависимость модуля.

AddEventHandler('socialservices', 'OnAuthServicesBuildList', array('\\Ambersport\\Strava\\Auth', 'GetDescription'));

На этом этапе в настройках модуля Социальные сервисы Strava со значком Яндекса (что поделать, он по умолчанию) появилась в списке доступных социальных сервисов, а блок с полями под ключи благодаря функции GetSettings появился ниже.

Strava в списке социальных сервисов

Соответствующие поля нужно заполнить данными из настройки вашего приложения на сайте strava.com/settings/api.

Далее, как по инструкции, добавляем метод GetFormHtml, который будет выводить кнопку авторизации на форме авторизации и, по идее, всё должно заработать. Я использую Flexible SSL от CloudFlare, чтобы не мучиться с SSL, поэтому от себя я добавил метод  isFlexSSL и свойство flexSSL, которое необходимо выставить в false, если вы не такой жадина как я и пользуетесь приличным SSL-сертификатом.

Метод GetFormHtml для Strava

 Всё, да ни всё — сервер Strava вернет вам code, который нужно будет обменять на access_token в последнем ключевом методе Authorize. В максимальном приближении реализация уже есть для сервиса VKontakte, и ее можно «содрать», но я сэкономлю немного вашего времени:

  • Класс Ambersport\Strava\Auth для работы с модулем Социальные Сервисыpastebin.com/M9XcgdV0
  • Класс Ambersport\Strava\OAuth для работы авторизации через Strava: pastebin.com/BVAM2NMZ
  • Классы, кстати, можно называть и по-старинке, например: CSocServHandlers и CSocServStrava — пока никто не запрещает. Единственное, их надо будет переименовать и убрать namespace-ы.

Вот теперь добавляем нарядные стили к CSS-классу .strava-button и радуемся тому, что пользователи Strava могут у нас регистрироваться.

Кнопка Connect with Strava

Тыкаем в кнопку, вводим свой логин и пароль от Strava — теперь работает.  Кончено, код можно причесать, чтобы везде были классы и методы из D7, и ссылки собирались-разбирались по-человечески, а не через explode/implode, но я этого делать не буду. Я вам сэкономил полчаса-час, так что сами и причёсывайте! 




Возврат к списку