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

Обработчик
За все отвечает обработчик OnAuthServicesBuildList.
Код самого обработчика достаточно прост

Регистрируем уникальный ID, указываем класс, с каким будем работать, имя и css-класс иконки. Сразу же видим результат на странице настроек модуля Соц.сервисы

Иконка показывается Яндекса, так как CSS стиль не определен, но это я не буду рассматривать.
Класс
Далее идет класс, который и зарегистрировал обработчик. В данном случае это CSocServDit. Он может получать расширения от двух других классов
Второй вариант это схема OpenID-клиент и OpenID-сервер, стандартный протокол, рассматривать не будем. Все остальное (любые варианты внешней авторизации) решает первый класс, расширенный от CSocServAuth. Отличительная особенность - в случае OPenID нет настроек, в первом случае за это отвечает метод GetSettings. Формат отдаваемых параметров ровно такой же, как у страницы настроек любого модуля.

Получаем

Опишу только в общих чертах оставшиеся методы класса - в сумме их три - первый мы рассмотрели.
Метод GetFormHtml отвечает за формирование ссылки для перехода

Получаем. Собственно, метод выше отвечает только за нижний блок. На верхний вы не можете влиять.

Далее метод Authorize, вызывается всегда, когда в url передан параметр auth_service_id=ID_вашего_сервиса (подразумевается, что по данному URL стучится внешний сервер. Там и идет обработка входных параметров, проверяется ключ сессии, ну и любое другое, что вы сочтете нужным проверить. В случае успеха, происходит _либо_ авторизация пользователя (если он уже есть), _либо_ создание (и последующая авторизация) нового пользователя. Это все делается одной строкой, вам не надо ничего делать самим:
Полный код метода

Как видите, структура проста:
- рестарт буфера вывода
- проверка ключей (которые получены от удаленного сервера)
- формирование массива для создания пользователя (если его нет), особенности оного которые: в XML_ID рекомендуется держать уникальный ID пользователя на внешнем сервере, EMAIL может быть пустым
- авторизация, либо создание и авторизация пользователя (авторизация идет как раз по тому уникальному ID
- формирование JS для редиректа (почему JS - потому что все это действие происходит в popup окне, и редирект нам надо делать в родительском)
Далее осталось рассмотреть скрипт-приемник на удаленном сервере. Собственно, то, куда и будет редиректиться пользователь с нашего ресурса. Так как в моем случае он тоже на Битрикс, код получился максимально понятным (проверяется ключ, и если все ок, отдаем данные текущего пользователя по ссылке redirect_uri)

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

Если все ок, происходит редирект с авторизацией. Да, предупреждение о запросе авторизации таким-то сайтом я тоже не делал. мне не требовалось.

Вот и все. Необходимые файлы вы можете скачать ниже. socialservices.php - файл с обработчиком и классом, можете подцепить его в init.php, файл index.php для внешнего сервера (не забудьте в нем указать свой ключ).
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Расширяем социальные сервисы своим сервисом авторизации
В этом посте я рассмотрю как можно написать свой соц.сервис авторизации.
Обработчик
За все отвечает обработчик OnAuthServicesBuildList.
AddEventHandler('socialservices', 'OnAuthServicesBuildList', array('CSocServHandlers', 'GetDescription')); |

Регистрируем уникальный ID, указываем класс, с каким будем работать, имя и css-класс иконки. Сразу же видим результат на странице настроек модуля Соц.сервисы

Иконка показывается Яндекса, так как CSS стиль не определен, но это я не буду рассматривать.
Класс
Далее идет класс, который и зарегистрировал обработчик. В данном случае это CSocServDit. Он может получать расширения от двух других классов
class CSocServDit extends CSocServAuth или class CSocServDit extends CSocServOpenID |

Получаем

Опишу только в общих чертах оставшиеся методы класса - в сумме их три - первый мы рассмотрели.
Метод GetFormHtml отвечает за формирование ссылки для перехода

Получаем. Собственно, метод выше отвечает только за нижний блок. На верхний вы не можете влиять.

Далее метод Authorize, вызывается всегда, когда в url передан параметр auth_service_id=ID_вашего_сервиса (подразумевается, что по данному URL стучится внешний сервер. Там и идет обработка входных параметров, проверяется ключ сессии, ну и любое другое, что вы сочтете нужным проверить. В случае успеха, происходит _либо_ авторизация пользователя (если он уже есть), _либо_ создание (и последующая авторизация) нового пользователя. Это все делается одной строкой, вам не надо ничего делать самим:
$bSuccess = $this->AuthorizeUser($arFields); |

Как видите, структура проста:
- рестарт буфера вывода
- проверка ключей (которые получены от удаленного сервера)
- формирование массива для создания пользователя (если его нет), особенности оного которые: в XML_ID рекомендуется держать уникальный ID пользователя на внешнем сервере, EMAIL может быть пустым
- авторизация, либо создание и авторизация пользователя (авторизация идет как раз по тому уникальному ID
- формирование JS для редиректа (почему JS - потому что все это действие происходит в popup окне, и редирект нам надо делать в родительском)
Далее осталось рассмотреть скрипт-приемник на удаленном сервере. Собственно, то, куда и будет редиректиться пользователь с нашего ресурса. Так как в моем случае он тоже на Битрикс, код получился максимально понятным (проверяется ключ, и если все ок, отдаем данные текущего пользователя по ссылке redirect_uri)

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

Если все ок, происходит редирект с авторизацией. Да, предупреждение о запросе авторизации таким-то сайтом я тоже не делал. мне не требовалось.

Вот и все. Необходимые файлы вы можете скачать ниже. socialservices.php - файл с обработчиком и классом, можете подцепить его в init.php, файл index.php для внешнего сервера (не забудьте в нем указать свой ключ).
Назад в раздел
Подписаться на новые материалы раздела: