[HybridAuth] Версия 1.0.0-rc без объекта haUser


На днях Николай Ланец выпустил свой компонент социальной авторизации modHybridAuth, и объяснил, зачем:

Во-первых, HybridAuth не умеет работать с родным для MODX-а компонентом Login.

Во-вторых, HybridAuth использует расширенные классы modUser, что ИМХО не есть круто, о чем я говорил уже не раз. Чем не круто? Как минимум тем, что объект пользователя не может быть инстансом сразу двух расширяющих классов. То есть если в какой-то момент появится желание использовать еще один пакет, расширяющий класс modUser, вам придется выбирать какой из этих двух пакетов использовать, так как одновременно они работать не смогут.

Первый пункт не совсем понятен. HybridAuth — самостоятельное дополнение, а не hook для Login. Они прекрасно работают вместе, и юзер, созданный через Login, может привязать к своему профилю соцсети и входить через них.
И без Login всё отлично работает — есть все нужные функции, включая редактирование профиля. Зачем устанавливать Login, если у вас на сайте вход только через соцсети?

Так что, первый пункт — скорее достоинство, а вот по поводу второго я согласен полностью.

Моя версия HybridAuth была выпущена давно, аж в 2012 году и расширение класса modUser я использовал для изменения алгоритма проверки пароля.
В то время я просто не знал, что это можно сделать через плагин вот таким способом:
case 'OnWebAuthentication':
	$modx->event->_output = !empty($_SESSION['HybridAuth']['verified']);
	unset($_SESSION['HybridAuth']['verified']);
	break;
Ну а сегодня этот метод давно проверен в Office, так что необходимость в haUser отпала и я рад предложить вам версию 1.0.0, в которой этот недостаток исправлен.

Что изменилось?

При установке обновления все имеющиеся haUser превращаются в modUser. Связи с профилями доступны по прежнему как Services.

Для текущего юзера:
foreach ($modx->user->Services as $service) {
	print_r($service->toArray());
}

Для любого другого юзера
$user_id = 10;

if ($user = $modx->getObject('modUser', $user_id)) {
	$services = $user->getMany('Services');
	foreach ($services as $service) {
		print_r($service->toArray());
	}
}

Добавление composite связи работает через указание в metadata.mysql.php. Что то подобное я уже делал в miniShop2, с его расширением товаров, ну а тут Николай предложил еще один симпатичный вариант.

Из недостатков — больше нет возможности получить gravatar вот так
$user->get('gravatar');

Но в сниппетах он генерируется, конечно:
'gravatar' => 'https://gravatar.com/avatar/' . md5(strtolower($profile['email']))

Так же в плагинах на создание и обновление юзера переменная с объектом больше не $hauser, а просто $user — как и у оригинальных процессоров.

Ну а в остальном всё по-прежнему. Обновление должно пройти гладко и никто из пользователей его не заметит.

Заключение


Версия уже протестирована на bezumkin.ru и modx.pro, правда и там, и там HybridAuth работает в связке с Office, но это не влияет на смену класса и вход через соцсети.

Все доступные провайдеры вот здесь, документация по подключению некоторых из них вот здесь.

Обновляйтесь, пишите отзывы.
Василий Наумкин
02 октября 2014, 05:10
modx.pro
3 680
+10

Комментарии: 34

Fi1osof
02 октября 2014, 14:42
+1
Первый пункт не совсем понятен. HybridAuth — самостоятельное дополнение, а не hook для Login. Они прекрасно работают вместе, и юзер, созданный через Login, может привязать к своему профилю соцсети и входить через них.
И без Login всё отлично работает — есть все нужные функции, включая редактирование профиля.
Василий, я не планировал тебя оскорбить, а просто вспомнил очень старый диалог здесь.

Саша Пекшев
11 месяцев назад

зачем делать hybdridAuth если уже у Безумкена это есть?
Николай Ланец
11 месяцев назад
ответ на комментарий пользователя Саша Пекшев

3. HybridAuth не работает совместно с другими средствами регистрации/авторизации, включая родной для MODX — Login. Элементарное доказательство — у него на сайте вход только через HybridAuth. А мой пакет полностью совместим и работает с Login. Вы можете в этом убедиться, скачав сборку или просто погоняя тестовый сайт. Так что если вас устраивают пакеты безумкина — это ваше дело. А меня качество и функциональность его пакетов не устраивает.
Саша Пекшев
11 месяцев назад
ответ на комментарий пользователя Николай Ланец

Да проблема с Login конечно у него есть, сам сталкивался с такой дилеммой и нехотя пришлось от Logina отказаться, хотелось бы увидеть отдельно как пакет ваш modHybridAuth, ведь я так понимаю он идет вместо с shopModx?
Зачем устанавливать Login, если у вас на сайте вход только через соцсети?
Вот в том-то и прикол, что не всегда люди хотят свои соцпрофили палить, и некоторые предпочитают обычную регистрацию. Не стоит исключать одно ради другого, это вместе дружит нормально.
Они прекрасно работают вместе, и юзер, созданный через Login, может привязать к своему профилю соцсети и входить через них.
А вот здесь, если можно, поподробней. Ты имеешь ввиду зарегиться юзером обычным способом, а потом в личном кабинете привязать соцпрофиль? Но у меня задача стояла чуть другая — обеспечить сразу регистрацию через Login. Зачем? А затем, чтобы не плодить два отдельных механизма. То есть есть Login-форма, через которую можно зарегиться обычным способом, а можно через нее зарегиться и социальным профилем. И вот тут как раз и всплывает та несовместимость, о которой я говорил: Login не использует родной процессор для регистрации пользователей, и следовательно не выполняются родные плагин-ивенты, когда бы можно было вклиниться в процесс регистрации. По этой причине в modHybridAuth входит сниппет-хук для Login-а.
Но в целом на мой пакет можно забивать, потому что он как и многие мои пакеты будет сопровождаться lowcontext-документацией и требованиями к программному уровню :)

P.S. Так, на заметку: не знаю, поправил ты или нет, но на modxcloud.com твой пакет барахлил из-за известных их проблем с сессиями, он у меня тупо не работал там.
    Василий Наумкин
    02 октября 2014, 16:32
    +1
    А вот здесь, если можно, поподробней. Ты имеешь ввиду зарегиться юзером обычным способом, а потом в личном кабинете привязать соцпрофиль?
    1. Юзер может зайти сразу через HybridAuth, в первый раз — это создаст нового юзера MODX с привязанной соцсетью и случайным паролем.
    Если потом админ поставит Login, то юзер сможет сбросить через него пароль и входить и по нему, и через соцсеть.

    2. Login уже стоит, юзер входит\регистрируется через него, а потом привязывает соцсети в редактировании профиля.

    Механизм везде един — создание юзера через процессор security/user/create. Конечно, немного расширенным для HybridAuth, но юзер полностью валидный.

    Login не использует родной процессор для регистрации пользователей, и следовательно не выполняются родные плагин-ивенты
    Ну я могу только поздравить авторов Login с таким решением. Еще один повод его не использовать.

    не знаю, поправил ты или нет, но на modxcloud.com твой пакет барахлил из-за известных их проблем с сессиями, он у меня тупо не работал там.
    Да, поправил, это из-за php-apc.
      Fi1osof
      02 октября 2014, 16:37
      0
      1. Юзер может зайти сразу через HybridAuth, в первый раз — это создаст нового юзера MODX с привязанной соцсетью и случайным паролем.
      Если потом админ поставит Login, то юзер сможет сбросить через него пароль и входить и по нему, и через соцсеть.

      2. Login уже стоит, юзер входит\регистрируется через него, а потом привязывает соцсети в редактирвоании профиля.
      Да, вот как раз сразу оба эти действия и надо было объединить, чтобы не приходилось делать или так, или так.
      ОК, с этим ясно.

      Ну я могу только поздравить авторов Login с таким решением. Еще один повод его не использовать.
      Ну, писал его никто иной, как Шон МакКормик, а он как известно не последнее место в команде MODX занимал. Просто пакет старый, и тоже тогда еще не было class-based процессоров, а потом перепиливать не стали.
        Василий Наумкин
        02 октября 2014, 16:55
        0
        Этот процессор был в MODX Revolution с 21 мая 2009 года. А первый коммит в Login был 25 июня 2009 года.

        Довольно странно не пользоваться системными решениями, особенно, если ты один из архитекторов системы. Я всегда думал, что процессоры для того и нужны — стандартизировать рутинные операции.
          Fi1osof
          02 октября 2014, 17:05
          0
          Так Шон больше по фронту. Я вообще всегда его считал фронт-энд разработчиком и удивлялся, когда что-то серверное у него находил.
          И главное — это не class-based процессор, в нем прописаны проверки прав, и простой или неавторизованный пользователь просто не сможет создать нового пользователя. В данном случае эти проверки не перегрузить, а давать права всем подряд — не секурно.
            Василий Наумкин
            02 октября 2014, 17:06
            0
            Наверное, да, в этом и причина.

            Странно, всё-таки, что до сих пор не переделали.
              Fi1osof
              02 октября 2014, 17:11
              0
              У них и без того дел полно, и Шона давно уже с ними нет, да и для кого? На это аудитория несколько человек, которые итак себе напишут все, если надо. В общем, занимаются более важными делами.
    Alexander V
    02 октября 2014, 14:51
    0
    Не могли бы прокомментировать принцип привязки аккаунтов?
    Например:
    Пользователь авторизовался и поработал с двумя аккаунтами поочередно.
    1. Google 2. Yandex
    Будучи авторизованным в одном (1.Google) и привязывая дополнительный (2. Yandex), то пользователя (2. Yandex) мы теряем навсегда.
      Василий Наумкин
      02 октября 2014, 16:24
      0
      И, в чем вопрос? Что у юзера 2 учетки на сайте и он не знает, что делает?

      Если на сайте есть Login или Office, то можно авторизоваться во вторую учетку через них, и привязать соцсеть обратно.
      Если нет — пусть в таком случае пишет админу и тот перепривязывает его вручную, для этого нужно просто сменить internalKey в соответствующей записи таблицы HybridAuth.
      Fi1osof
      02 октября 2014, 15:11
      0
      Из недостатков — больше нет возможности получить gravatar вот так
      $user->get('gravatar');
      Ну а что, добавь дополнительный объект профиля пользователя и все. Будет типа $user->HaUserProfile->get('gravatar'); и все.
        Fi1osof
        02 октября 2014, 16:05
        0
        Раз уж я здесь сегодня глаза мозолю, то позволю себе еще один комментарий.
        Для текущего юзера:

        foreach ($modx->user->Services as $service) {
        print_r($service->toArray());
        }

        Для любого другого юзера
        $user_id = 10;

        if ($user = $modx->getObject('modUser', $user_id)) {
        $services = $user->getMany('Services');
        foreach ($services as $service) {
        print_r($service->toArray());
        }
        }
        А почему в примере для остальных пользователей не написал просто foreach ($user->Services as $service) {…, а по старинке $user->getMany('Services');? Не привык еще к новому методу, или какие-то другие причины есть?
          Василий Наумкин
          02 октября 2014, 16:44
          0
          У юзера не прописано свойство Services, поэтому любая IDE будет выводить что-то такое:


          xPDOObject::getMany() привычнее и нагляднее.
            Fi1osof
            02 октября 2014, 17:00
            0
            Глупая IDE)))
            Просто в разных случаях ты по разному написал, вот мне и стало интересно.
              Василий Наумкин
              02 октября 2014, 17:02
              0
              Не задумывался, автопилот. Наверное, чтобы видно было и так, и так.

              Если бы писал в PhpStorm — было бы в одном стиле, он бы меня поправил =)
                Fi1osof
                02 октября 2014, 17:07
                0
                Ясно:)
          Михаил
          02 октября 2014, 18:08
          +2
          Интересно было почитать)))))
            De Ribaskin
            03 октября 2014, 17:11
            0
            Поставил все работает.

            Фон на картинке color-icons.png тока белый стал.
            А в прошлых версиях прозрачный был.

            Картинка с прозрачным фоном думаю будет более актуальной.
              Василий Наумкин
              03 октября 2014, 17:16
              0
              Последний раз картинки менялись 8 месяцев назад.
                De Ribaskin
                03 октября 2014, 17:21
                0
                значит я это тока заметил :)
                  Василий Наумкин
                  03 октября 2014, 17:27
                  0
                  А ведь ты прав! Сейчас цветные картинки с белам фоном, а были с прозрачным.

                  Это в прошлого коммита — Илья прислал такие, а я не проследил. Поправлю, спасибо!
                    Василий Наумкин
                    03 октября 2014, 17:48
                    0
                    Там еще и размер был в 3 раза больше, чем должен.

                    Поправил, забирай файлы с прозрачным фоном. Еще немного подожду сообщений об ошибах и выпущу финальную версию с ними.
                Мордынский Николай
                06 октября 2014, 02:33
                0
                Так вот почему я не могу через соц сети авторизоваться)) на modx.pro… После оаторизации стова вижу кнопку войти вместо в личный кабинет… через ссылку на почту захожу нормально.)
                  Василий Наумкин
                  06 октября 2014, 06:53
                  0
                  Соц сети? У тебя к профилю только один Яндекс привязан.

                  Больше никто о проблемах не сообщал, ошибок в логе не вижу.
                    Мордынский Николай
                    07 октября 2014, 11:03
                    0
                    Я про симпл дрим.)) Тут меня нормально авторизует, а на симпл дриме почему то не пускает или надо в лк. соц сети привязать сначала?
                      Василий Наумкин
                      07 октября 2014, 11:04
                      0
                      Надо привязать, да.
                        Мордынский Николай
                        07 октября 2014, 11:08
                        0
                        Необычно однако. Соц авторизация как бы придумывалась для упрощения 1 регистрации — вовлечения пользователя)), а тут чел приходит… о ну ка регнусь соц сетью — не пускает че за хрень сайт кривой фу фу фу… и так далее). Дело конечно хозяйское)) Я не критикую не вкоем случае просто недоумевал почему меня не пускает через соц сетки).
                  Михаил Шестаков
                  07 октября 2014, 11:26
                  0
                  Василий, здравствуйте.
                  Была установлена версия 0.5, далее произведен апгрейд на 1.0, в опциях сабжа указаны провайдеры — гугл, яндекс, твиттер, вконтакт, фейсбук и линкедин. Вызывался сабж таким образом [[!HybridAuth? &providers=`Twitter`]], но после обновления из всех доступных провайдеров вызываются только Гугл, Яндекс и Линкедин. И при указание всех провайдеров, и без указание оных.
                  Ошибок в логе никаких не выводится.
                  Подскажите пожалуйста, куда копать?
                    Михаил Шестаков
                    07 октября 2014, 12:00
                    +1
                    Вопрос разрешился, полтора дня мучался с этим вопросом, а слона (adblock с фильтрами социальными) и не заметил. Часть иконок просто блокировалось адблоком, а раньше я вызывал со своим чанком, где вместо иконок были ссылки.
                    Олег Песчанский
                    02 декабря 2014, 19:23
                    0
                    На странице дополнения висит картинка

                    Но как сделать вот эту простую регистрацию, как на store.simpledream.ru, когда нужно ввести только email, и потом подтвердить его ссылкой на почте?
                      Василий Наумкин
                      02 декабря 2014, 21:32
                      0
                      Нужно просто отредактировать чанк. Там все поля необязательные, кроме email — почитай описание у них.
                        Олег Песчанский
                        03 декабря 2014, 10:54
                        0
                        Какие поля? В tpl.HybridAuth.login нет упоминания email, и нет никаких полей, только подгрузка провайдеров, и примера нигде нет, как сделать?
                          Василий Наумкин
                          03 декабря 2014, 11:19
                          0
                          На скриншоте — Office. Если использовать один HybridAuth, то email там нет.

                          Картинку заменил, чтобы никого больше не смущать.
                            Олег Песчанский
                            03 декабря 2014, 12:10
                            0
                            Вот теперь правильная картинка :)

                            Спасибо за ответ!
                      Алексей
                      04 декабря 2014, 14:54
                      0
                      очень досадно что не работает с раширением для хрома chrome.google.com/webstore/detail/referer-control/hnkcfpcejkafcihlgbojoidoihckciin (Referer Control)
                      хотя у Вас на хостинге авторизируется без проблем. Возможно это связано с редиректом на id.modx.pro и обратно
                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                        34