easyAuth [1.0.0-beta]


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


Изначально компонент был разработан для платного доступа к видео-трансляции на сайте — администратор генерировал пароли, которые рассылались по почте с ограничением времени доступа.
Сейчас пришли в голову такие вот примеры использования:
  • Доступ к видеоконференции
  • Временный доступ к материалам для скачивания
  • Доступ к закрытому разделу с документами
Компонент умеет:
  • Ограничивать доступ по дате


  • Ограничивать доступ по «количеству входов»

  • Ограничивать доступ по количество времени, проведенном в «закрытом разделе»


  • Администратор в любой момент может заблокировать пользователя и его «выбросит» в течении 10 секунд

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


Изначально планировалось сделать привязку «открытых паролей» к пользователям MODX, даже были сделаны поля в таблицах для этого, но на текущий момент такой привязки нет.

Демка фронта: easyauth.vo-it.ru/index.php?id=2

Обратите внимание, для фиксации времени пребывания и отключения пользователя в нужный момент, каждые 10 секунд компонент шлет ajax-запрос к серверу (когда пользователь авторизован). Таким образом, немного модифицировав код, можно, например, разлогинить всех пользователей сразу. :)

Использование компонента очень простое, достаточно вызывать сниппет isLoggedIn, который принимает 2 чанка — чанк формы авторизации и чанк с закрытым контентом.

Компонент в modstore, цена 490 рублей.

P.S. для тех, кто будет говорить, что хранить пароль в открытом виде плохо — это не пароли, это «коды доступа» =)
17 октября 2016, 13:35    Лев Вербицкий   G+  
14    913 +21

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

  1. Василий Наумкин 17 октября 2016, 13:53 # 0
    Обратите внимание, для фиксации времени пребывания и отключения пользователя в нужный момент, каждые 10 секунд компонент шлет ajax-запрос к серверу (когда пользователь авторизован).
    Мне кажется, что правильнее просто ставить флаг в БД и выкидывать юзера при следующей загрузке страницы.
    1. Лев Вербицкий 17 октября 2016, 14:00 # +3
      Это тоже делается, но время в любом случае, надо же как то считать время в онлайне)
      1. Василий Наумкин 17 октября 2016, 14:01 # +2
        Тогда да, согласен.
    2. Dmitry L. 24 марта 2017, 02:15 # 0
      Товарищи, подскажите, как реализовать вывод контента (ресурсы в Коллекциях) на страницу (одна единственная, контент меняется) при входе определенного пользователя.
      Например, есть коллекция ресурсов Иванов Иван — список статей, при авторизации выводятся именно ресурсы, привязанные к авторизующемуся пользователю?
      1. Alexander V 16 апреля 2017, 11:34 # 0
        Вы не могли бы показать пример создание пользователя без админки и получение данных о достигнутых лимитах?
        API наверное какой-то есть?
        1. rifo_BLR 19 мая 2017, 12:26 # 0
          Демо не работает
          1. Andre 09 августа 2017, 17:34 # 0
            Каким образом реализовать скрытие части контента странички?
            Имеется ввиду если пользователь не авторизирован часть контента по хайдом.
            Такое решение используем на форумах тегами [[hide]]
            1. Andre 09 августа 2017, 17:49 # 0
              на вордпресе такое решение
              <?php if ( is_user_logged_in() ) { 
              echo "Содержание для зарегистрированных  пользователей"; } 
              else { 
              echo "Чтобы увидеть текст, Вам нужно авторизоваться"; } ?>
              а как с MODX
              1. Василий Столейков 09 августа 2017, 18:08 # +1
                Если на родном парсере MODX, то:
                [[!+modx.user.id:isloggedin:is=`1`:then=`Содержание для зарегистрированных  пользователей`:else=`Чтобы увидеть текст, Вам нужно авторизоваться`]]
                
                Если на парсере Fenom, то:
                {if '' | isloggedin}Содержание для зарегистрированных  пользователей{else}Чтобы увидеть текст, Вам нужно авторизоваться{/if}
                Или используя этот пакет: modx.com/extras/package/personalize (кстати, в нём можно увидеть и php-код, которые это делает.
              2. Сергей 06 декабря 2017, 13:44 # 0
                Можно ограничить доступ к группе ресурсов или к категории и всем вложенным ресурсам? Если да то надо будет добавлять каждый созданный ресурс в эту группу или можно как то наладить все автоматически?
                1. Лев Вербицкий 06 декабря 2017, 13:51 # 0
                  Нет, нельзя. Компонент не для этого предназначен.
                2. Дмитрий 12 декабря 2017, 15:58 # 0
                  Спасибо за компонент! Внезапно пригодился и дико выручил. Заказчик в восторге.
                  От себя хочу поделиться тем, как я привязал компонент к шаблонизатору Fenom.
                  Нужно было закрыть сайт целиком от посторонних глаз, а значит, закрыть вообще все страницы. Вставлять на каждый шаблон вызов сниппета и подставлять шаблон если авторизовались, или форму с авторизацией, если нет — очень топорное решение, подумал и запилил такой сниппет:
                  <?php
                  /** @var array $scriptProperties */
                  /** @var easyAuth $easyAuth */
                  if (!$easyAuth = $modx->getService('easyauth', 'easyAuth', $modx->getOption('easyauth_core_path', null, $modx->getOption('core_path') . 'components/easyauth/') . 'model/easyauth/', $scriptProperties)) {
                      return 'Could not load easyAuth class!';
                  }
                  $easyAuth->loadJsCss();
                  
                  if ($easyAuth->authIsLoggedIn()||$modx->user->isAuthenticated('mgr')) {
                      $res = true;
                  } else {
                      $res = false;
                  }
                  
                  return $res;
                  А в шаблоне base, от которого наследуются все остальные, прописал следующее:
                  {var $logged = $_modx->runSnippet('!isLoggedInBoolean')}
                          {if !$logged?}
                              {include 'tpl.easyAuth.authForm'}
                          {else}
                              {block 'content'}
                  //тут контент сайта.
                  	{/block}
                  {/if}
                  
                  Получилось, вроде бы, очень даже ничего.
                  Вы должны авторизоваться, чтобы оставлять комментарии.