[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, но это не влияет на смену класса и вход через соцсети.
Все доступные провайдеры вот здесь, документация по подключению некоторых из них вот здесь.
Обновляйтесь, пишите отзывы.
Комментарии: 34
Первый пункт не совсем понятен. 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 твой пакет барахлил из-за известных их проблем с сессиями, он у меня тупо не работал там.
А вот здесь, если можно, поподробней. Ты имеешь ввиду зарегиться юзером обычным способом, а потом в личном кабинете привязать соцпрофиль?1. Юзер может зайти сразу через HybridAuth, в первый раз — это создаст нового юзера MODX с привязанной соцсетью и случайным паролем.
Если потом админ поставит Login, то юзер сможет сбросить через него пароль и входить и по нему, и через соцсеть.
2. Login уже стоит, юзер входит\регистрируется через него, а потом привязывает соцсети в редактировании профиля.
Механизм везде един — создание юзера через процессор security/user/create. Конечно, немного расширенным для HybridAuth, но юзер полностью валидный.
Login не использует родной процессор для регистрации пользователей, и следовательно не выполняются родные плагин-ивентыНу я могу только поздравить авторов Login с таким решением. Еще один повод его не использовать.
не знаю, поправил ты или нет, но на modxcloud.com твой пакет барахлил из-за известных их проблем с сессиями, он у меня тупо не работал там.Да, поправил, это из-за php-apc.
1. Юзер может зайти сразу через HybridAuth, в первый раз — это создаст нового юзера MODX с привязанной соцсетью и случайным паролем.Да, вот как раз сразу оба эти действия и надо было объединить, чтобы не приходилось делать или так, или так.
Если потом админ поставит Login, то юзер сможет сбросить через него пароль и входить и по нему, и через соцсеть.
2. Login уже стоит, юзер входит\регистрируется через него, а потом привязывает соцсети в редактирвоании профиля.
ОК, с этим ясно.
Ну я могу только поздравить авторов Login с таким решением. Еще один повод его не использовать.Ну, писал его никто иной, как Шон МакКормик, а он как известно не последнее место в команде MODX занимал. Просто пакет старый, и тоже тогда еще не было class-based процессоров, а потом перепиливать не стали.
Этот процессор был в MODX Revolution с 21 мая 2009 года. А первый коммит в Login был 25 июня 2009 года.
Довольно странно не пользоваться системными решениями, особенно, если ты один из архитекторов системы. Я всегда думал, что процессоры для того и нужны — стандартизировать рутинные операции.
Довольно странно не пользоваться системными решениями, особенно, если ты один из архитекторов системы. Я всегда думал, что процессоры для того и нужны — стандартизировать рутинные операции.
Так Шон больше по фронту. Я вообще всегда его считал фронт-энд разработчиком и удивлялся, когда что-то серверное у него находил.
И главное — это не class-based процессор, в нем прописаны проверки прав, и простой или неавторизованный пользователь просто не сможет создать нового пользователя. В данном случае эти проверки не перегрузить, а давать права всем подряд — не секурно.
И главное — это не class-based процессор, в нем прописаны проверки прав, и простой или неавторизованный пользователь просто не сможет создать нового пользователя. В данном случае эти проверки не перегрузить, а давать права всем подряд — не секурно.
Наверное, да, в этом и причина.
Странно, всё-таки, что до сих пор не переделали.
Странно, всё-таки, что до сих пор не переделали.
У них и без того дел полно, и Шона давно уже с ними нет, да и для кого? На это аудитория несколько человек, которые итак себе напишут все, если надо. В общем, занимаются более важными делами.
Не могли бы прокомментировать принцип привязки аккаунтов?
Например:
Пользователь авторизовался и поработал с двумя аккаунтами поочередно.
1. Google 2. Yandex
Будучи авторизованным в одном (1.Google) и привязывая дополнительный (2. Yandex), то пользователя (2. Yandex) мы теряем навсегда.
Например:
Пользователь авторизовался и поработал с двумя аккаунтами поочередно.
1. Google 2. Yandex
Будучи авторизованным в одном (1.Google) и привязывая дополнительный (2. Yandex), то пользователя (2. Yandex) мы теряем навсегда.
И, в чем вопрос? Что у юзера 2 учетки на сайте и он не знает, что делает?
Если на сайте есть Login или Office, то можно авторизоваться во вторую учетку через них, и привязать соцсеть обратно.
Если нет — пусть в таком случае пишет админу и тот перепривязывает его вручную, для этого нужно просто сменить internalKey в соответствующей записи таблицы HybridAuth.
Если на сайте есть Login или Office, то можно авторизоваться во вторую учетку через них, и привязать соцсеть обратно.
Если нет — пусть в таком случае пишет админу и тот перепривязывает его вручную, для этого нужно просто сменить internalKey в соответствующей записи таблицы HybridAuth.
Из недостатков — больше нет возможности получить gravatar вот такНу а что, добавь дополнительный объект профиля пользователя и все. Будет типа $user->HaUserProfile->get('gravatar'); и все.
$user->get('gravatar');
Раз уж я здесь сегодня глаза мозолю, то позволю себе еще один комментарий.
Для текущего юзера:А почему в примере для остальных пользователей не написал просто foreach ($user->Services as $service) {…, а по старинке $user->getMany('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());
}
}
У юзера не прописано свойство Services, поэтому любая IDE будет выводить что-то такое:
xPDOObject::getMany() привычнее и нагляднее.
xPDOObject::getMany() привычнее и нагляднее.
Глупая IDE)))
Просто в разных случаях ты по разному написал, вот мне и стало интересно.
Просто в разных случаях ты по разному написал, вот мне и стало интересно.
Не задумывался, автопилот. Наверное, чтобы видно было и так, и так.
Если бы писал в PhpStorm — было бы в одном стиле, он бы меня поправил =)
Если бы писал в PhpStorm — было бы в одном стиле, он бы меня поправил =)
Ясно:)
Интересно было почитать)))))
Поставил все работает.
Фон на картинке color-icons.png тока белый стал.
А в прошлых версиях прозрачный был.
Картинка с прозрачным фоном думаю будет более актуальной.
Фон на картинке color-icons.png тока белый стал.
А в прошлых версиях прозрачный был.
Картинка с прозрачным фоном думаю будет более актуальной.
Последний раз картинки менялись 8 месяцев назад.
значит я это тока заметил :)
А ведь ты прав! Сейчас цветные картинки с белам фоном, а были с прозрачным.
Это в прошлого коммита — Илья прислал такие, а я не проследил. Поправлю, спасибо!
Это в прошлого коммита — Илья прислал такие, а я не проследил. Поправлю, спасибо!
Там еще и размер был в 3 раза больше, чем должен.
Поправил, забирай файлы с прозрачным фоном. Еще немного подожду сообщений об ошибах и выпущу финальную версию с ними.
Поправил, забирай файлы с прозрачным фоном. Еще немного подожду сообщений об ошибах и выпущу финальную версию с ними.
Так вот почему я не могу через соц сети авторизоваться)) на modx.pro… После оаторизации стова вижу кнопку войти вместо в личный кабинет… через ссылку на почту захожу нормально.)
Соц сети? У тебя к профилю только один Яндекс привязан.
Больше никто о проблемах не сообщал, ошибок в логе не вижу.
Больше никто о проблемах не сообщал, ошибок в логе не вижу.
Я про симпл дрим.)) Тут меня нормально авторизует, а на симпл дриме почему то не пускает или надо в лк. соц сети привязать сначала?
Надо привязать, да.
Необычно однако. Соц авторизация как бы придумывалась для упрощения 1 регистрации — вовлечения пользователя)), а тут чел приходит… о ну ка регнусь соц сетью — не пускает че за хрень сайт кривой фу фу фу… и так далее). Дело конечно хозяйское)) Я не критикую не вкоем случае просто недоумевал почему меня не пускает через соц сетки).
Василий, здравствуйте.
Была установлена версия 0.5, далее произведен апгрейд на 1.0, в опциях сабжа указаны провайдеры — гугл, яндекс, твиттер, вконтакт, фейсбук и линкедин. Вызывался сабж таким образом [[!HybridAuth? &providers=`Twitter`]], но после обновления из всех доступных провайдеров вызываются только Гугл, Яндекс и Линкедин. И при указание всех провайдеров, и без указание оных.
Ошибок в логе никаких не выводится.
Подскажите пожалуйста, куда копать?
Была установлена версия 0.5, далее произведен апгрейд на 1.0, в опциях сабжа указаны провайдеры — гугл, яндекс, твиттер, вконтакт, фейсбук и линкедин. Вызывался сабж таким образом [[!HybridAuth? &providers=`Twitter`]], но после обновления из всех доступных провайдеров вызываются только Гугл, Яндекс и Линкедин. И при указание всех провайдеров, и без указание оных.
Ошибок в логе никаких не выводится.
Подскажите пожалуйста, куда копать?
Вопрос разрешился, полтора дня мучался с этим вопросом, а слона (adblock с фильтрами социальными) и не заметил. Часть иконок просто блокировалось адблоком, а раньше я вызывал со своим чанком, где вместо иконок были ссылки.
Нужно просто отредактировать чанк. Там все поля необязательные, кроме email — почитай описание у них.
Какие поля? В tpl.HybridAuth.login нет упоминания email, и нет никаких полей, только подгрузка провайдеров, и примера нигде нет, как сделать?
На скриншоте — Office. Если использовать один HybridAuth, то email там нет.
Картинку заменил, чтобы никого больше не смущать.
Картинку заменил, чтобы никого больше не смущать.
Вот теперь правильная картинка :)
Спасибо за ответ!
Спасибо за ответ!
очень досадно что не работает с раширением для хрома chrome.google.com/webstore/detail/referer-control/hnkcfpcejkafcihlgbojoidoihckciin (Referer Control)
хотя у Вас на хостинге авторизируется без проблем. Возможно это связано с редиректом на id.modx.pro и обратно
хотя у Вас на хостинге авторизируется без проблем. Возможно это связано с редиректом на id.modx.pro и обратно
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.