AdminTools 1.4.0 Авторизация в админке через email


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


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

Реализовать через ExtJs у меня не получилось, нет никакой возможности подключить свои скрипты на страницу с формой — у контроллера авторизации не работают методы addJavascript() и addCss() (они работают, но их результат не учитывается), а переопределить этот контроллер при загрузке страницы никак — он жёстко прописывается в коде. По крайней мере, я не нашёл такого способа. А менять ядро по понятным причинам не хотелось. Поэтому я решил использовать стандартную возможность MODX — с версии 2.2.0 можно указывать альтернативный адрес формы авторизации. Но чтобы авторизация заработала, нужно выполнить настройку.

Настройка

Для начала нужно её включить в системных настройках, по-умолчанию она выключена. Там же нужно указать id страницы, на которой будет размещаться форма. Лично я создал новую страницу с пустым шаблоном, на которой вызываю сниппет adminLogin, отвечающий за авторизацию.
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=[[++modx_charset]]" />
    <meta name="robots" content="noindex" />
    <base href="[[++site_url]]" />
    <title>[[*pagetitle]]</title>
</head>    
<body>
    [[!adminLogin]]
</body>
</html>
Так получается максимально похоже на админку. Сама форма находится в чанке tpl.login.form.

Как работает

Для авторизации нужно ввести логин или email. Если у пользователя нет прав на админку, то «давай, до свидания». Если права есть, то на указанный или найденный по логину email, будет выслана ссылка. Она будет активна согласно системной настройке authorization_ttl. По-умолчанию, 10 минут. По истечению этого времени она деактивируется. Также как и при авторизации через неё. Второй раз по ней не зайдешь. В общем, я уже пользуюсь, вроде всё ок. Но версия пока бета. Кому такая возможность не нужна, просто не включайте настройку.

Что ещё хотел отметить. Авторизация происходит через стандартный login-процессор, поэтому все события отрабатывают как положено.

Была ещё мысль в целях повышения безопасности сделать email уведомление пользователю при авторизации в админке через его логин, как это сделано в банк-клиентах. Но потом решил, что это уже перебор.
24 января 2016, 19:00    Сергей Шлоков   G+  
0    1165 +7

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

  1. Адиль 26 января 2016, 13:20 # 0
    Сергей на твой modzone.ru ругается веб, че у тебя там?
    1. Сергей Шлоков 26 января 2016, 14:04 # 0
      Это который доктор? Хрен знает. Почему-то он у них в базе вредоносных сайтов. Почему не понятно. Вот что пишет.

      Вирусов нет, проблем нет, но опасность с большой буквы. Попахивает разводкой. У меня Касперский. У него претензий нет.
      1. Сергей Шлоков 27 января 2016, 18:54 # +1
        Написал в техподдержку доктора, сайт удалили из базы вредоносных сайтов. Всё теперь чисто.
        1. Адиль 30 января 2016, 00:26 # 0
          А что сказали хоть, по какой причине зпнесли в черный тебя?
          1. Сергей Шлоков 31 января 2016, 19:49 # 0
            Возможно до меня на этом ip был вредоносный сайт.
      2. @ndrew 05 февраля 2016, 18:55 # 0
        Заметил баг безопасности с AdminTools.
        Если включить в системных настройках авторизацию по емайлу и не указать ID ресурса.
        То войти в админку site.ru/manager можно с любым паролем!!!!!
        Проверял с любых браузеров и даже со смартфона!!!
        Отключаю плагин или в системных настройках отключаю авторизацию по емайлу или указываю id ресурса и все норм.
        1. Сергей Шлоков 05 февраля 2016, 20:26 # 0
          Поэтому и бета. Исправил. Спасибо.
          1. Федор 26 апреля 2016, 06:20 # 0
            Здравствуйте, Сергей! Один вопрос, то есть этот способ нужен, если самостоятельно зарегистрировать менеджера с правами на бэкэнд и дать ссылку на страницу авторизации по мейлу? То есть пароль запоминать не обязательно а ему его вообще знать не нужно? И как быть с авторизацией по /manager, есть менеджеры которую ее знает и у них заполнены логин пароль… и так же в личном кабинете они могут нажать изменить пароль или сбросить, и на почту прийдет письмо со ссылкой на обычную авторизацию… Или старую можно как-то скрыть и оставить только для себя? Еще один обидный момент, этот способ не работает при офлайн сайте, пока идет тест или подбор админов:(+ страница должна быть опубликована
            1. Сергей Шлоков 26 апреля 2016, 07:03 # 0
              Этот способ работает для всех без исключения! На страницу /manager/ зайти никому не получится — плагин переадресовывает на указанный ресурс. Для авторизации хоть менеджера хоть админа нужно указать логин или email. Если нужно сделать выборочную авторизацию по email, то в плагине можно добавить условие для переадресации (например, принадлежность к какой-либо группе).
              Пароль не имеет значения. Он не учитывается. Авторизация работает только по email. Поэтому адрес должен быть рабочий, а не липовый.
              1. Федор 26 апреля 2016, 07:10 # 0
                странно, я разлогинился и смог открыть как созданную мною страницу с авторизацией по мейлу, так и просто /manager где нужно ввести логин и пасс, как обычно. 2е- если разлогинится, то снова открывается страница /manager :( Вот при авторизации через мейл на /manager перебрасывает, но так как авторизация прошла я вижу админку, как и должно быть. Собственно поэтому у меня и появились вопросы, если заходить на сайт/manager спокойно открывается старая форма, в тот же момент я могу открыть сайт/avtorizaciya-adminov и предлагает ввести логин и сбросить линк… сбрасывает и на почту приходит… не понимаю, что сделал не так. Сайт включил в онлайн, в настройках вкл функцию авторизации через мейл и указал ресурс (131), страницу опубликовал.
                1. Сергей Шлоков 26 апреля 2016, 07:36 # 0
                  Странно. У меня всё работает — и при разлогинивании и при вводе адреса. На /manager/ зайти невозможно.
                  1. Федор 26 апреля 2016, 07:38 # 0
                    Хм:( странно… то есть у вас, даже при выключенном сайте можно зайти на эту страницу, так как она должна заменять /manager?
                    1. Сергей Шлоков 26 апреля 2016, 07:59 # 0
                      Нет. Сделаю отмену переадресации у выключенного сайта в новой версии.
                      1. Федор 26 апреля 2016, 08:04 # 0
                        не, на выключенном сайте у меня вообще не открывается страница сайт/по-мейлу, вылезает сообщение о недоступности сайта, как на любой другой… работает только сайт/manager. А я думал, что сайт/по-мейлу заменит его, и при выключенном сайте я смогу зарегать 30 контент менеджеров и скинуть ссылку на логин по мейлу, ну и тестить, кто как работает. В любом случае, даже когда все нормально включено и настроено, у меня все равно открывается /manager, как ни в чем не бывало, попробую еще раз вечерком, хорошенько почистив права доступа и кэш сайта, ну и браузер… может поможет
                        1. Сергей Шлоков 26 апреля 2016, 08:26 # 0
                          На выключенном сайте показывается всего одна страница — указанная в настройке site_unavailable_page. Можно указать в ней 131 страницу.
                          А почему не работает переадресация не знаю, нужно смотреть сайт.
                          1. Федор 26 апреля 2016, 08:35 # 0
                            блин, точно! спасибо, думаю разберусь.
                            1. Федор 26 апреля 2016, 09:35 # 0
                              переадресация работает :) При отключенном сайте, указав страницу 131, как site_unavailable_page правда выдает ошибку, когда пишешь логин, «сервис не доступен» но письмо все равно доходит и авторизация проходит)
                              1. Федор 26 апреля 2016, 16:06 # 0
                                наткнулись на неприятный казус, теперь админы не могут фронт энд залогинится :)) у меня оффисс… он просил логин, а говорит что ссылку уже отправляли, ее надо активировать… а я по ней уже в бэкэнде зашел…
              Вы должны авторизоваться, чтобы оставлять комментарии.