В рамках разработки раздела помощи был радикально обновлен сниппет Loginza.

Ключ пользователя

Основной претензией к старой версии были имена юзеров, типа 87088086a20b477d70fb88e326ba07ed. Это из-за того, что я сохранял ключ пользователя в username, для идентификации.
В новой версии ключ хранится в remote_key (в админке его не видно) и теперь можно использовать нормальные имена юзеров.

Старые учетки, созданные Loginza 1.1.* автоматически конвертируются. Если у юзера есть nickname на удаленном сервисе — он сохраняется в username. Если такое имя на сайте уже есть — добавляется число.
Если nicname нету — останется 87088086a20b477d70fb88e326ba07ed.

Редактирование профиля

Логичным развитием стала возможность обновлять свой профиль, для этого появилось 2 новых действия и 2 параметра:
  • Действие getProfile — выводит текущие данные профиля
  • Действие updateProfile — обновляет профиль через системный процессор. Можно прикрутить плагины на события OnUserFormSave и OnUserBeforeSave.
  • Параметр profileTpl — чанк для редактирования профиля.
  • Параметр profileFields — список полей юзера и профиля, разрешенных для изменения.
Для нормальной работы этой функции нужно авторизовать юзеров с параметром &updateProfile=`0`, иначе измененные данные будуь затираться при каждом логине.

Для неавторизованного пользователя будет ошибка 401.

Прочее

  • Сниппет теперь работает и с недружественными url, которые index.php?id=*.
  • В чанке &tplLogin можно использовать плейсхолдеры modUser, а не только modUserProfile.
  • К сниппету добавлены параметры (для drug-n-drop в админке), прилично переписан код.
  • Изменил URL в чанках входа/выхода.

Changelog

Кнопочка «обновить» для пакета в админке, скорее всего, не загорится. Поэтому, просто поищите новую версию в «Управлении пакетами», загрузите и установите.
Это не моя вина, это у MODX интересно работает репозиторий.

Предыдущая заметка
IntellectMoney для miniShop


Комментарии ()

  1. Андрей Трофименко 21 августа 2012, 07:36 # 0
    Скажите, а как в логинзе решается проблема с дублированием пользователей (например сегодня пользователь зашел через майл — он один пользователь, завтра он же через фейсбук — он уже другой стал)
    1. Василий Наумкин 21 августа 2012, 10:15 # 0
      Никак, это 2 разных пользователя.

      Как можно догадаться о том, что это один и тот же человек?
      1. Sadykh Sadykhov 21 августа 2012, 11:17 # 0
        В других системах делают так:
        1. e-mail совпадает
        2. в профиле человек привязывает другие социальные аккаунты, и потом через них может войти.
        1. Василий Наумкин 21 августа 2012, 12:31 # 0
          1. Человек может войти вообще без ничего, с голым identity
          2/ У меня нет никакого желания городить такое. Вообще, не понятно, зачем человеку входить через разные сервисы?

          Если, блин, он не может запомнить, через что входит — то привязывать все он точно не будет.

          Я уж молчу, что это сильно усложнит простой и надежный компонент.
          1. Sadykh Sadykhov 21 августа 2012, 12:51 # 0
            1. В комментарии ниже я написал, что если человек заходит через ВК или Twitter (Твиттер вообще не передаёт e-mail), то логично один раз спросить у пользователя его e-mail.
            2. Это я понимаю, комментарий написал к тому, что если один пользователь заходит с разных социальных аккаунтов. Я вот захожу с аккаунта Твиттера, ибо там авторизация сделана удобнее и безопаснее всего.
            1. Василий Наумкин 21 августа 2012, 14:11 # 0
              1. Авторизация через сторонние сервисы сделана для ускорения логина. Дополнительные расспросы это замедляют.

              Далеко не всем принудительно нужен email юзера. Если нужен — редирект через плагин.

              2. Зачем заходить на один и тот же сайт с разных социальных аккаунтов?

              Зачем усложнять код простого и надежного компонента?

              В любом случае — исходники на Github, присылайте свои правки.
    2. Sadykh Sadykhov 21 августа 2012, 11:16 # 0
      >Если у юзера есть nickname на удаленном сервисе — он сохраняется в username. Если такое имя на сайте уже есть — добавляется число.
      По-моему, логичнее было спрашивать у пользователя «такой никнейм занят, выберите другой (только один раз)». Или при авторизации через ВК, например, просить e-mail адрес.

      1. Василий Наумкин 21 августа 2012, 12:39 # 0
        А по моему логично авторизовать в один клик, а затем дать в настройках изменить имя.

        Лично меня крайне бесят при авторизации всплывающие окошки с требованиями. Я просто хочу зайти в закрытый раздел, и мне по-барабану, какое там будет имя.

        А вот если мне сайт понравился — можно и имя поменять, и фотку добавить и почту указать.

        Если же злой владелец сайта требует определенные поля — то он всегда может плагином по OnWebLogin редиректить юзера на изменение профиля и требовать там, что захочет.
        1. Sadykh Sadykhov 21 августа 2012, 12:57 # 0
          Согласен насчёт негодования при требованиях. Но я привык, что после входа меня спрашивают e-mail. Я как администратор, не люблю когда пользователь меняет никнеймы, поэтому логично сделать:
          1. Авторизовался, никнейм из соц. профиля взял
          2. Дать возможность один раз сменить никнейм на сайте

          MODX Revo фиксирует где-нибудь количество изменений никнейма?
          1. Василий Наумкин 21 августа 2012, 14:13 # 0
            Специально для этого существую плагины, которые срабатывают при разных событиях.

            Есть события на вход, выход, до обновления профиля и после обновления.

            P.S. удобно должно быть не администратору, а посетителю.
      2. Андрей Трофименко 22 августа 2012, 11:00 # 0
        Пришел к выводу, чтобы не плодить дублированных юзеров, сделать простую регистрацию без социалок…
        1. Василий Наумкин 22 августа 2012, 11:25 # 0
          Что помешает создать у вас на сайте 10 учеток одним юзером?

          С ­другой стороны, почему нельзя ограничить кол-во сервисов для входа через ­Логинзу?

          На мой взгляд, проблема надумана. Из-за нескольких ­склерозников, которые не помнят через что авторизовывались, нормальные люди ­будут заполнять регистрационную простыню, а потом забывать ­пороли.

          Лично я при виде регистрации просто ухожу с большинства ­сайтов. У меня уже есть учетки в Твиттере, Яндексе, Гугле — нафига ­мне еще?
          1. Андрей Трофименко 22 августа 2012, 14:22 # 0
            Советуете оставить к примеру один mail.ru? А где ограничивается количество вервисов входа через логинзу?
            1. Василий Наумкин 22 августа 2012, 14:41 # 0
              Чанк tpl.Loginza.login

              Почитайте немного у них на сайте https://loginza.ru/api-overview#widget_install
              1. Андрей Трофименко 22 августа 2012, 14:53 # 0
                Спасибо. Я так понял из чанка удалить ссылки на ненужные сервисы. Скажите, присматриваюсь к Вашему магазину «Minishop», хочу на его основе сделать купонный сервис. Какие подводные камни для такого проекта могут быть? Благодарю
                1. Василий Наумкин 22 августа 2012, 15:32 # 0
                  Только незнание PHP, MySQL и MODX.
        2. Владимир Бурнос 23 августа 2012, 18:58 # 0
          Доброго для! А настройки 'ID' и 'Секретный ключ' не предусмотрены в новом снипете? (Мой виджет Loginza https://loginza.ru/my-widgets/****)
          1. Василий Наумкин 23 августа 2012, 19:14 # 0
            А в старом, что, было предусмотренно?

            Что-то я не вижу, куда их можно прикрутить: https://loginza.ru/api-overview#widget_install
            Если в вызове виджета — то меняйте tpl.Loginaza.login

            Ну и при работе на моем сайте (http://webstartpage.ru) статистика прекрасно учитывется без id и ключа.

            Полагаю, Логинзе достаточно доменного имени, с которого идет запрос.
          2. Суркин Александр 25 августа 2012, 00:23 # 0
            У меня теперь при логине вообще почти все поля пустые, только в «Имя пользователя» что-то типа 7032621488f5b19c37dfcf30d9271298 и все. Ни никнейма, ни почты, ни фио :(
            1. Василий Наумкин 25 августа 2012, 07:09 # 0
              Значит, ваш сервис ничего не передает.

              Через что входите? Я проверю.
              1. Александр Суркин 25 августа 2012, 23:23 # 0
                Входил через вконтакте
                1. Василий Наумкин 26 августа 2012, 07:43 # 0
                  Угу, все понятно. Они ничего не отдают, кроме identity.

                  Я сделал новый сайт на modx-test.com, установил логунзку, и вошел через 3 сервиса. Результат на скриншоте:
                  Лучше всех передал инфу Яндекс.

                  Поэтому, я и сделал обновление профиля на сайте, юзером, чтобы он мог дополнять инфорамцию о себе.
            2. Sergey Vlasenko 25 августа 2012, 22:53 # 0
              Доброго времени суток.
              Вопрос не по теме, но все же как вы сделали блок «Последние комментарии», не видел такой возможности у hypercomments
              1. Василий Наумкин 26 августа 2012, 06:54 # 0
                HyperComments умеют присылать уведомления о событиях (новый каммент, удаление каммента).

                Я эти комментарии сохраняю у себя в БД, и дальше могу с ними работать.

                Сначала хотел компонент написать, для интеграции HC с MODX, но что-то все руки не доходят.
              2. Артем Кузнецов 30 августа 2012, 15:33 # 0
                Привет! а для EVO сниппет не обновляется?
                1. Василий Наумкин 30 августа 2012, 15:35 # 0
                  А это надо спрашивать у автора сниппета для Evo.

                  Я, как известно, с Evo не работаю.
                  1. Артем Кузнецов 30 августа 2012, 15:39 # 0
                    А автор кто? как найти?
                2. Фахретдинов Сергей 03 сентября 2012, 10:15 # 0
                  Василий, подскажите, все же проблема с передачей имени и фамилии из Вконтакте, я так понимаю связан с конкретной реализацией в MODx, так как на вашем webstartpage.ru/ все прекрасно работает и не спрашивает дополнительной информации (берет всю информацию из профиля в соц. сети)?
                  1. Василий Наумкин 03 сентября 2012, 10:25 # 0
                    Webstartpage построен на том же MODX и работает с этим же сниппетом.

                    Полагаю, проблема есть между Логинза и Вконтакте.
                    Сниппет просто получает инфу от Логинзы одним способом, для всех сервисов.

                    То есть, если инфа от логинзы пришла — она будет у юзера в данных. Если нет — не будет.

                    Я на это никак повлиять не могу. Если была бы какая то ошибка в моем сниппете, то не было бы данных при авторизации через ВСЕ сервисы, но проблема только у Вконтакте.

                    Надеюсь, Логинза починят взаимодействие с ними.
                    1. Фахретдинов Сергей 03 сентября 2012, 10:32 # 0
                      Попробовал зайти под профилем гугл, то же все отлично на webstartpage.ru отработало. Не мог случайно в репозитарий modx попасть старый плагин?
                      1. Василий Наумкин 03 сентября 2012, 11:07 # 0
                        Неа. Все работает как надо.

                        Вот, попробовал зайти через Гугл (см. картинки), он выдал только email юзера. Соотвественно, он и попал в профиль, остально надо заполнить.
                        В username — хэш identity, ибо он полюбому должен быть заполнен.

                        Так что, все работает как часы, что отдает сервис — то и в профиле.
                        1. Фахретдинов Сергей 03 сентября 2012, 12:00 # 0
                          Василий, а проделайте то же самое на webstartpage.ru
                          1. Василий Наумкин 03 сентября 2012, 13:21 # 0
                            Вы правы — моя ошибка.

                            Виновата была функция очистки данных от всякой бяки — она резала русский алфавит.

                            Все поправил, добавил сохранение фотки и выложил в репозиторий. Обновляйтесь и проверяйте.

                            Версия должна быть 1.2.2

                            P.S. на webstartpage был старый сниппет, без ошибки.
                            1. Фахретдинов Сергей 03 сентября 2012, 13:30 # 0
                              Большое спасибо! Все работает!
                              1. Василий Наумкин 03 сентября 2012, 13:31 # 0
                                Вам спасибо, за внимательность и настойчивость =)
                  2. Андрей 09 сентября 2012, 14:22 # 0
                    не работает авторизация через вк — Выдает ошибку: sign validation Invalid session or session signature… Не пойму в чем дело либо яндекс совсем забил на логинзу?(
                    1. Василий Наумкин 09 сентября 2012, 14:24 # 0
                      Скорее, просто какие-то временные тормоза. Бывает.
                    2. Пётр Молчанов 13 сентября 2012, 17:37 # 0
                      Судя по всему проблема авторизации в ВК скорее всего личного (а возможно политического) характера, т.к. уже неделю не могут починить. подожду еще немного, но если ничего не изменится, то придется как-то мигрировать на uLogin
                      1. Василий Наумкин 13 сентября 2012, 17:45 # 0
                        Удачи!

                        Там, кстати, есть свой готовый компонент для Revo.
                        1. Пётр Молчанов 13 сентября 2012, 17:47 # 0
                          Есть-то он есть, вот только что делать с теми, кто уже авторизовывался через логинзу… Установил модуль uLogin, так он создал отдельную таблицу ulogin_user
                          1. Василий Наумкин 13 сентября 2012, 17:51 # 0
                            Либо он нужен для связи профилей из разных сетей с одной учеткой, либо у авторов руки из жопы и они не знают, куда надо создавать юзеров в MODX.

                            Попробуйте переделать сниппет Loginza на uLogin — там разница совсем небольшая будет, только в получении данных от сервиса.- goo.gl/vQp6U
                            1. Пётр Молчанов 13 сентября 2012, 17:55 # 0
                              Попробую. сравню файлы для начала))) может пока я тут вожусь с ulogin уже и логинза оживет. но в ulogin меня привлекают 2 вещи:
                              1. возможность указать обязательные поля (например, с вк не тянется емэил, в этом случае до регистрации пользователя попросят ввести емэил). для моей компании емэил — это то, что нужно в результате регистрации
                              2. тяутся большие аватарки
                              1. Василий Наумкин 13 сентября 2012, 18:03 # 0
                                Не надо файлы сравнивать, надо только переписать несколько строк, где получается инфа с сервиса.

                                1. Решается плагином как на этом сайте — без почты вас просто не выпустит со страницы настроек профиля.

                                2. Есть Gravatar, который отлично хранит аватарки и позволяет их запрашивать в разных размерах. Очень всем советую.
                                1. Пётр Молчанов 14 сентября 2012, 10:18 # 0
                                  1. я решил средствами Modx, перенаправля на страницу, где надо указать email, правда пришлось лезть в сам модуль в loginza.class
                                  2. не хочется еще что-то прикручивать… итак куча всего на сайте)))
                                  1. Василий Наумкин 14 сентября 2012, 10:36 # 0
                                    1. Тогда можете забыть об обновлениях компонента, ибо они затрут ваши правки. Правильнее делать плагином.

                                    2. Там просто запрашивается картинка по md5($email) и все. Никакой лишней нагрузки не будет. У меня на сайте Gravatar отлично работает.
                                    Кстати, сходите туда, и подвешайте свой аватар для вашего ящика — увидите, что картинка на сайте у вас обновится (только не для старых камментов).
                                    1. Пётр Молчанов 14 сентября 2012, 11:11 # 0
                                      Я се на сайт тоже hc поставил и аватарка подменяется и у старых коментов, жаль имя не меняется, если изменить в ЛК… и ссылки на аккаунт нету, но надеюсь в будущем сделают.
                                      про обновления знаю, но мне итак пришлось лезть в код т.к. при регистрации идет учет куки (ведем статистику привлеченных людей нашими партнерами + учет регистраций по нашим рекл. компаниям). в модуле login это я решил через хук, а у вас хуков нет ((( до плагинов еще не дорос
                      Добавление новых комментариев отключено.