Login OTP (2FA) — Двухфакторная аутентификация по email
Плагин Login OTP (2FA) для Cotonti Siena
Описание
Плагин Login OTP (2FA) добавляет двухфакторную аутентификацию (2FA) для системы управления контентом Cotonti Siena v.0.9.26. После ввода логина и пароля пользователю отправляется одноразовый 5-значный код (OTP) на электронную почту. Код необходимо ввести на специальной странице для завершения авторизации. Это повышает безопасность входа, защищая от несанкционированного доступа, даже если пароль пользователя был скомпрометирован.

Плагин полностью интегрируется с ядром Cotonti, поддерживает локализацию (английский, русский, украинский) и имеет адаптивный интерфейс на основе Bootstrap 5 и Bootstrap Icons.
Основные возможности
- Генерация одноразового 5-значного кода (OTP) для входа.
- Отправка кода на email пользователя.
- Настраиваемый срок действия кода (по умолчанию 5 минут).
- Поддержка опции «Запомнить меня» для сохранения сессии.
- Адаптивный интерфейс страницы ввода кода с валидацией.
- Логирование успешных и неуспешных попыток ввода OTP.
- Многоязычная поддержка: английский, русский, украинский.
- Интеграция с настройками Cotonti (включение/выключение 2FA, настройка времени жизни кода).
Требования
- CMF Cotonti Siena: v.0.9.26
- PHP: 8.4 или выше
- MySQL: 8.0 или выше
- Настроенный почтовый сервер для отправки email (через функцию
cot_mail()).
Структура плагина
Плагин имеет следующую структуру файлов:
plugins/
└── loginotp/
├── loginotp.setup.php
├── loginotp.install.sql
├── loginotp.uninstall.sql
├── loginotp.users.login.check.php
├── loginotp.php
├── inc/
│ ├── loginotp.functions.php
├── lang/
│ ├── loginotp.en.lang.php
│ ├── loginotp.ru.lang.php
│ ├── loginotp.ua.lang.php
├── tpl/
│ ├── loginotp.tpl
Описание файлов
| Файл | Описание |
loginotp.setup.php | Регистрирует метаданные плагина в админ-панели Cotonti. Содержит конфигурацию плагина (включение 2FA, время жизни кода). |
loginotp.install.sql | SQL-скрипт для создания таблицы cot_loginotp, в которой хранятся OTP-коды, их срок действия и пользовательские данные. |
loginotp.uninstall.sql | SQL-скрипт для удаления таблицы cot_loginotp при деинсталляции плагина. |
loginotp.users.login.check.php | Перехватывает процесс авторизации (хуки users.auth.check). Проверяет логин/пароль, генерирует OTP, сохраняет его в базе и отправляет на email. Редиректирует на страницу ввода кода. |
loginotp.php | Обрабатывает страницу ввода OTP (хуки standalone). Проверяет введённый код, авторизует пользователя при успехе или показывает ошибку при неудаче. |
inc/loginotp.functions.php | Содержит основные функции плагина: инициализация, проверка активности 2FA, генерация OTP-кода. |
lang/loginotp.en.lang.php | Локализация на английском языке. |
lang/loginotp.ru.lang.php | Локализация на русском языке. |
lang/loginotp.ua.lang.php | Локализация на украинском языке. |
tpl/loginotp.tpl | Шаблон страницы ввода OTP. Содержит HTML-форму с Bootstrap-стилями, валидацией и иконками. |
Установка
- Скачайте плагин из репозитория.
- Распакуйте архив и скопируйте папку
loginotpв директориюplugins/вашего сайта на Cotonti. - Перейдите в админ-панель Cotonti: Администрирование → Расширения → Установить новые.
- Найдите плагин Login OTP (2FA) и нажмите Установить. Скрипт
loginotp.install.sqlавтоматически создаст таблицуcot_loginotp. - Настройте плагин в разделе Администрирование → Расширения → Login OTP → Конфигурация:
- otp_enabled: Включить/выключить 2FA (1 = включено, 0 = выключено).
- otp_lifetime: Время жизни OTP-кода в секундах (300, 600, 900 секунд).
- Отправка email функция
cot_mail().
Использование
- Пользователь вводит логин (или email, если разрешено) и пароль на стандартной странице входа Cotonti.
- Если логин и пароль верны, плагин генерирует 5-значный OTP-код, сохраняет его в базе и отправляет на email пользователя.
- Пользователь перенаправляется на страницу ввода кода (
plug.php?e=loginotp). - На странице ввода кода пользователь вводит полученный OTP. Форма проверяет:
- Код должен быть 5-значным числом.
- Код не должен быть просрочен (срок действия указан в настройках).
- При правильном коде пользователь авторизуется и перенаправляется на целевую страницу (или главную). При неверном коде показывается ошибка, и пользователь может попробовать снова.
Логирование
Плагин записывает в лог Cotonti (Администрирование → Логи) следующие события:
- Успешная авторизация:
OTP SUCCESS: user_id=X - Неуспешная попытка:
OTP FAIL: user_id=X, code=Y
Локализация
Плагин поддерживает три языка:
- Английский (
loginotp.en.lang.php) - Русский (
loginotp.ru.lang.php) - Украинский (
loginotp.ua.lang.php)
Языковые файлы содержат все сообщения, отображаемые пользователю: заголовки, подсказки, ошибки и текст email. Язык определяется настройками Cotonti.
Шаблон (loginotp.tpl)
Шаблон loginotp.tpl использует Bootstrap 5 для стилизации и включает:
- Адаптивную форму ввода кода с автоматической фокусировкой на поле.
- Валидацию на стороне клиента (JavaScript): проверка на 5-значное число.
- Иконки Bootstrap Icons для уведомлений (информация/ошибка).
- Стилизованную кнопку отправки с эффектом ховера.
- Подсказку о сроке действия кода (5 минут) (от фонаря пока, нужно заводить из
$valSome = (int) Cot::$cfg['plugin']['loginotp']['otp_lifetime'];).
Конфигурация
Настройки плагина доступны в админ-панели:
- otp_enabled: Радиокнопка для включения/выключения 2FA (по умолчанию выключено).
- otp_lifetime: Выпадающий список для выбора времени жизни кода (300, 600, 900 секунд; по умолчанию 600 секунд).
Деинсталляция
- Перейдите в Администрирование → Расширения → Login OTP → Удалить.
- Скрипт
loginotp.uninstall.sqlавтоматически удалит таблицуcot_loginotp. - Удалите папку
plugins/loginotpс сервера.
Лицензия
Плагин распространяется под лицензией BSD. Подробности в файле loginotp.setup.php.
Copyright © 2025 webitproff. Все права защищены.
Контакты и поддержка
Автор: webitproff
GitHub: github.com/webitproff
Для вопросов, предложений или сообщений об ошибках создавайте issue в репозитории.
Версия: 1.1.3 | Дата: 2025-10-26 | Лицензия: BSD
Репозиторий на GitHub
Лицензия BSD License Copyright (c) webitproff 2025