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, 10:35
modx.pro
14
3 572
+21

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

Василий Наумкин
17 октября 2016, 13:53
0
Обратите внимание, для фиксации времени пребывания и отключения пользователя в нужный момент, каждые 10 секунд компонент шлет ajax-запрос к серверу (когда пользователь авторизован).
Мне кажется, что правильнее просто ставить флаг в БД и выкидывать юзера при следующей загрузке страницы.
    Лев Вербицкий
    17 октября 2016, 14:00
    +3
    Это тоже делается, но время в любом случае, надо же как то считать время в онлайне)
Dmitry L.
24 марта 2017, 02:15
0
Товарищи, подскажите, как реализовать вывод контента (ресурсы в Коллекциях) на страницу (одна единственная, контент меняется) при входе определенного пользователя.
Например, есть коллекция ресурсов Иванов Иван — список статей, при авторизации выводятся именно ресурсы, привязанные к авторизующемуся пользователю?
    Alexander V
    16 апреля 2017, 11:34
    0
    Вы не могли бы показать пример создание пользователя без админки и получение данных о достигнутых лимитах?
    API наверное какой-то есть?
      rifo_BLR
      19 мая 2017, 12:26
      0
      Демо не работает
        Денис Усачев
        09 августа 2017, 17:34
        0
        Каким образом реализовать скрытие части контента странички?
        Имеется ввиду если пользователь не авторизирован часть контента по хайдом.
        Такое решение используем на форумах тегами [[hide]]
          Денис Усачев
          09 августа 2017, 17:49
          0
          на вордпресе такое решение
          <?php if ( is_user_logged_in() ) { 
          echo "Содержание для зарегистрированных  пользователей"; } 
          else { 
          echo "Чтобы увидеть текст, Вам нужно авторизоваться"; } ?>
          а как с MODX
            Василий Столейков
            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-код, которые это делает.
            Сергей
            06 декабря 2017, 13:44
            0
            Можно ограничить доступ к группе ресурсов или к категории и всем вложенным ресурсам? Если да то надо будет добавлять каждый созданный ресурс в эту группу или можно как то наладить все автоматически?
              Лев Вербицкий
              06 декабря 2017, 13:51
              0
              Нет, нельзя. Компонент не для этого предназначен.
              Дмитрий
              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}
              Получилось, вроде бы, очень даже ничего.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                12