Files
ave-cms/help/modules/smsc-auth.md
T
2026-08-05 21:40:21 +03:00

7.1 KiB
Raw Blame History

Вход по SMS через SMSC

К модулям

Модуль smsc_auth отправляет одноразовый код через SMSC. Проверка кода, создание пользователя и публичная сессия выполняются ядром AVE.cms. Благодаря этому отключение или замена SMSC не меняет пользователей и их заказы.

Что получает посетитель

На странице входа появляется форма с телефоном. После отправки сообщения она заменяется полем для кода. Возможны два сценария:

  1. Телефон уже принадлежит активному пользователю — открывается его профиль.
  2. Телефона ещё нет — создаётся пользователь сайта в группе регистрации.

Оба сценария используют одну таблицу пользователей. Отдельных «SMS-аккаунтов» нет. Телефон хранится в международном виде, например +79001234567, и не может одновременно принадлежать двум профилям.

Подготовка SMSC

  1. Создайте аккаунт на smsc.ru.
  2. В кабинете SMSC выпустите отдельный API-ключ для сайта.
  3. При необходимости зарегистрируйте имя отправителя.
  4. Пополните баланс и проверьте, разрешена ли отправка на нужные направления.

Логин и пароль кабинета в AVE.cms вводить не нужно. Используйте отдельный API-ключ, который можно отозвать без смены пароля владельца SMSC.

Установка и настройка

  1. Откройте Модули -> Управление.
  2. Установите и включите Вход по SMS (SMSC).
  3. Откройте Модули -> Вход по SMS.
  4. Вставьте API-ключ и при необходимости имя отправителя.
  5. Оставьте в тексте SMS тег {code}.
  6. Сохраните настройки.
  7. В нижнем блоке отправьте тестовый код на свой номер.
  8. Включите публичный вход только после успешного теста.

Общая возможность создавать пользователей и их группа настраиваются в Система -> Пользователи сайта -> Регистрация. Там выберите регистрацию По телефону или По email или телефону. Переключатель модуля Создавать аккаунты может дополнительно запретить регистрацию по телефону, оставив вход существующих пользователей.

Ограничения кода

Настройка Назначение
Длина кода От 4 до 8 цифр. Для обычного сайта рекомендуется 6.
Код действует После этого времени код отклоняется.
Повторная отправка Минимальная пауза перед новым SMS в текущей сессии.
Попыток ввода Сколько неверных вводов разрешено одному challenge.
SMS в сутки Суточный предел для одного номера.

Дополнительно ядро ограничивает частоту запросов по IP и номеру. Новый код отменяет предыдущий, связан с текущей PHP-сессией и может быть использован только один раз. В базе хранится bcrypt-хеш кода, а не сам код.

Если создание аккаунтов выключено и номер не найден, публичный ответ всё равно выглядит как успешный запрос, но SMS не отправляется. Это не позволяет перебирать зарегистрированные телефоны и не расходует баланс на неизвестные номера.

Секреты и переменные окружения

Настройки по умолчанию находятся в закрытом хранилище storage/secrets/modules/smsc_auth.php. Их можно переопределить:

SMSC_AUTH_ENABLED=1
SMSC_API_KEY=your-api-key
SMSC_SENDER=AVEcms

Не добавляйте файл секретов и рабочий API-ключ в репозиторий, архив модуля, публичный шаблон или журнал ошибок.

Публичные шаблоны

Системная форма находится в system/App/Frontend/Auth/view/phone.twig. Для пользовательского шаблона входа доступен массив phone_providers. Если шаблон его не выводит, AVE.cms добавит рабочую форму после основной формы входа, поэтому старые темы не ломаются.

Публичные Ajax-адреса:

Метод и адрес Назначение
POST /auth/phone/request Нормализует телефон и отправляет код.
POST /auth/phone/verify Проверяет challenge и открывает сессию.

Оба адреса требуют CSRF-токен. Первый также проходит общую защиту публичных форм и rate limit.

Удаление модуля

При удалении стираются настройки SMSC и история незавершённых кодов. Пользователи, подтверждённые телефоны, заказы и профили сохраняются, потому что это общие данные AVE.cms. Без установленного SMS-провайдера форма входа по телефону просто не показывается.

Подключение другого SMS-провайдера

Новый транспорт реализует App\Frontend\Auth\Phone\ProviderInterface и регистрирует экземпляр через:

use App\Frontend\Auth\Phone\ProviderRegistry;

ProviderRegistry::register(new MySmsProvider());

Провайдер отвечает только за настройки и отправку sendCode($phone, $code). Он не должен самостоятельно создавать пользователя, хранить открытый код или управлять сессией.