Разработка модуля "Login Attempts Limiter"

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
  • Тема закрыта
#1 fachinformatiker
  • Группа: Пользователь
  • Сообщений: 1
  • Регистрация: 15.12.2011

16.12.2011 13:35

Доброго времени суток! Поскольку это мое первое сообщение, приветствую всех пользователей и администраторов:-)

Я живу в Германии и наданный момент прохожу практику на фирме, основная специализация которой –Magento. Я уже 1,5 месяца на фирме и уже написал свой первый тренировочный модуль, ознакомился со структурой модулей, основными возможностями, такими, как, например, метод Event-Observer, Rewrites, Cronjobs и др.

2 дня назад я получил первое задание, связанное с реальным клиентом, а именно разработка нестандартного модуля „Login Attempts Limiter“. Вот постановка проблемы:


„Необходимо разработать модуль, который сохраняет неудачные попытки (неверный пароль) логина клиентов и администраторов и блокирует доступ при достижении кол-ва неудачных попыток значения, конфигурируемого в админке.

Задачи:

Логин админа
  • Проверка повторных попыток
  • Сохранение попыток
  • Сброс попыток при удачном логине
  • Блокировка пользователя при достижении максимального значения
  • Отображение ошибки (при блокировке)
Логин клиента
  • Проверка повторных попыток
  • Сохранение попыток
  • Сброс попыток при удачном логине
  • Блокировка пользователя при достижении максимального значения
  • (необходимо учитывать, что логин может происходить в процессе Checkout)
  • Отображение ошибки (при блокировке)
Системная конфигурация (отдельные группы для фронтенда и админов)
  • Опция активировано: да / нет
  • Конфигурироемое максимальное значение попыток
  • E-mail при блокировке на указываемый адрес
  • Выбор групп клиентов / админов, для которых активен данный модуль

    (например, чтобы не блокировать суперадминистраторов)
Администраторские функции
  • Grid с заблокированными клиентами с возможностью разблокировки
  • Grid с заблокированными админами с возможностью разблокировки


На данном этапе мне необходимо разработать концепцию, КАК я собираюсь выполнить поставленную передо мной задачу и затем обсудить мои идеи с шефом. Сейчас я напишу о своих идеях. Моя просьба к форумчанам дать оценку моему подходу и, если Вы найдете что-то не совсем правильным или эффективным, указать на это и предложить лучшие методы решения поствленной задачи.

Стараясь избежать rewrite, недостатки которого всем известны, я пытался найти подходящие события в Magento, которые должны были бы звучать примерно так: „клиент ввел неправильный пароль“, „админ ввел неправильный пароль“, однако таких событий в Magento, к сожалению, нет. Затем я проверил, какие события происходят при неправильном вводе пароля существующим клиентом (записал их в лог) и админом. В случае клиента я нашел событие, которое „выстреливает“ один раз и очень мне подходит - „controller_action_predispatch_customer_account_loginPost“, которое происходит всякий раз перед вызовом Mage_Customer_AccountController::loginPostAction(), которая собственно и отвечает за логин клиента.Поэтому я хочу реагировать на это событиев своем наблюдателе.

С админом все выглядит немного сложнее, я здесь тоже изучил события, но подходящего не нашел. Скажу ,к примеру, что событие „admin_session_user_login_failed“ выстреливает при различного рода исключениях, то есть не только при вводе неправильного пароля. Поэтому в данном случае, на мой взгляд, избежать rewrite не получится – придется переписать класс
Mage_Admin_Model_User, в котором происходит аутентификация, и либо сгенерировать собственное событие при неправильном вводе пароля и реагировать на него, либо использовать, к примеру, сервисы, без Event-Observer подхода.

Пока все, не буду раздувать сообщение. Заранее рад и благодарен за Ваши ответы.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8886
  • Регистрация: 20.02.2010

16.12.2011 13:38

Правила задачи вопросов на этом форуме.
Основная мысль: вопросы должны быть краткие, чётко сформулированные, узкоспециализированные, конструктивно заданные.

Поделиться темой: