Cackle — единый вход

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

    Единый вход (Single Sign-On) позволяет существующим пользователям сайта оставлять комментарии через виджет Cackle от имени учетной записи пользователя на сайте без необходимости авторизации в виджете с помощью социальной сети (OAuth) или OpenID провайдера.


    Как это происходит?


    Для настройки единой авторизации в код виджета добавляется переменная mcSSOAuth, значение которой есть зашифрованные данные пользователя и секретный ключ виджета. В случае успешной верификации ключа данные сохраняются в системе, а сам пользователь авторизуется.
    Значение переменной должно формироваться на сервере и быть равно:

    <JSON данные пользователя в Base64><пробел><MD5 подпись запроса><пробел><текущее время в секундах>


    JSON данные пользователя включают в себя следующие атрибуты:
    • id — уникальный идентификатор пользователя
    • name — имя пользователя
    • email (необязательное) — адрес электронной почты
    • avatar (необязательное) — ссылка на аватар
    • www (необязательное) — ссылка на веб сайт

    MD5 подпись запроса формируется как:
    md5(<JSON данные пользователя в Base64><текущее время в секундах>)


    Site API Key - уникальный идентификатор виджета для работы с API. Его можно получить в панели администрирования на вкладке "Виджет", снизу выбрав WordPress плагин.

    Выход

    Для выхода пользователя, вместо JSON данных пользователя, нужно передавать пустую JSON строчку {}.

    Пример использования


    К примеру вы администратор ресурса www.example.org. На вашем сайте зарегистрирован пользователь Freeman. Вы хотите, чтобы Freeman мог оставлять комментарии через виджет Cackle под своим аккаунтом, без повторного входа. В этом случае нужно настроить единую аутентификацию, после чего Freeman и все остальные пользователи смогут комментировать от своих собственных учетных записей.

    Все что нужно сделать - это сформировать массив с данными пользователя Freeman из нашей БД:
    Допустим его id - 7, email - freeman@example.org, avatar - example.org/freeman.png, Site API Key виджета - 123456789, а функция is_user_logged_in() в нашей системе проверяет залогинен ли пользователь.

    function cackle_auth(){ $timestamp = time(); $siteApiKey = 123456789; if (is_user_logged_in()){ $user = array( 'id' => '7', 'name' => 'Freeman', 'email' => 'freeman@example.org', 'avatar' => 'http://example.org/freeman.png' ); $user_data = base64_encode(json_encode($user)); } else{ $user = '{}'; $user_data = base64_encode($user); } $sign = md5($user_data . $siteApiKey . $timestamp); return "$user_data $sign $timestamp"; }

    Функция cackle_auth возвращает строку, которую необходимо поместить в то место, где находится код виджета:
    <script type="text/javascript">
        var mcSSOAuth = '<?php echo cackle_auth(); ?>';
        // код виджета
    </script>
    


    Кстати говоря, в новой версии плагина для WordPress, единая авторизация уже реализована. Вы можете включить её выставив галочку в настройках.
    Cackle
    Company
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 13

      0
      Наконец то сделали!
        +3
        Шикарное название
          +3
          Cackle — Как единый выход? :)
            0
            В некоторых ситуациях других вариантов нет =)
            0
            Не сразу понятно, 5 буква — это i или l. В общем-то, оба варианта забавны ;-)
              0
              Надеюсь никто не обидеться, но самое смешное — это домен «cackle.me».
              0
              Хм, т.е. если стоит авторизация ulogin и комментарии cackle, то можно будет писать комментарии авторизовавшись через ulogin?
                0
                Да, совершенно верно.
                0
                Если пользователь не залогинен, то он может залогинится через наш сайт. Что я должен вернуть со странички логина?
                  0
                  Ничего, вы логинетесь на своем сайте, после этого идет редирект скажем на страницу с комментариями и вот тут, в виджете должна появится mcSSOAuth.
                    0
                    У меня наша форма входа открывается в новом окне (такое же поведение у социалок). При закрытии того окна страница-инициализатор чего-то ждет («часики»).
                      0
                      Тогда после вашего логина (с помощью вашего функционала), нужно сделать refresh и при это добавить в виджет mcSSOAuth с текущей информацией об авторизации.

                      Кстати, если вы php владеете, то можете посмотреть исходники WordPress плагина, там SSO уже по-умолчанию включен: wordpress.org/extend/plugins/cackle/
                  0
                  javist, если есть задача организовать нечто, по функционалу похожее на стену во вконтактике и автоматически выдавать права модератора конкретному пользователю плюсом к глобальным — как это можно сделать?
                  Поясню: заходим на страницу пользователя site.ru/users/javist, добавляем mcSSOAuth для распознавания текущего пользователя на сайте + в переменную
                         $user = array(
                            'id' => '7',
                            'name' => 'Freeman',
                            'email' => 'freeman@example.org',
                            'avatar' => 'http://example.org/freeman.png',
                            'is_moder' => true
                      );

                  добавляем еще одно поле is_moder = true, который бы добавлял в комментарии элементы управления/модерации.
                  Соотвественно у нас была бы возможность на уровне сервера добавлять еще один важный и подписанный параметр пользователю при входе на свою страницу и он мог бы САМ модерировать свою стену.

                  То же самое можно было бы применять для такой задачи:
                  — есть сообщество, есть топики, подключаем cackle — и для всех модератором сообщества формируем mcSSOAuth с параметром is_moder = true.
                  Обратите внимание, для каждого сообщества мы могли бы иметь динамически назначаемых модераторов, речь не про глобальных модераторов, назначаемых в админке вашей системы

                  Only users with full accounts can post comments. Log in, please.