Как сделать регистрацию и аутентификацию на сайтах под CMS ModX с помощью Exolve

d467413de478952e1bcefa49eda4abb5.png

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

Подтверждение регистрации — это первая линия защиты. Когда пользователь регистрируется, вы можете убедиться, что он действительно тот, за кого себя выдаёт. Подтверждение через SMS помогает удостовериться, что человек реально существует и может подтвердить свои данные. Это снижает риск того, что на вашем сайте будут «пустые» или ложные аккаунты, созданные ботами или злоумышленниками.

Аутентификация пользователей — это ключевой элемент в защите данных и репутации вашего ресурса. Когда клиент входит на сайт, он вводит логин и пароль, что позволяет вам точно знать, что доступ к его аккаунту имеет именно он, а не кто-то другой.

В этой статье речь пойдет о ресурсе, основанном на CMS ModX. Обеспечивать же безопасность данных пользователей и самого ресурса поможет API-платформа МТС Exolve. Разберемся, что это за сервисы.

ModX

ModX — это система управления контентом (CMS), позволяющая создавать, управлять и обновлять веб-ресурс без глубокого погружения в программирование.

Преимущество ModX в его гибкости. Многие CMS (например, WordPress) предлагают много готовых решений, но ограничивают вас в изменениях. В ModX вы можете настроить сайт практически как угодно.

Кроме того, ModX славится своей безопасностью и оптимизацией. Он даёт возможность разработчикам глубже контролировать код, что позволяет создавать сайты, которые работают быстрее и меньше подвержены атакам злоумышленников.

МТС Exolve

Это платформа для создания и управления различными цифровыми сервисами. При желании можно выстраивать целые системы сервисов, включая и SMS-подтверждения регистрации, аутентификации, оплаты и так далее.

Настройки SMS-подтверждения регистрации для ModX на основе МТС Exolve

До начала работы стоит изучить документацию Exolve, чтобы знать, как отправлять запросы для отправки SMS.

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

Прежде чем начать интеграцию с МТС Exolve, убедитесь, что ModX установлен и настроен на вашем сервере. Потребуется сделать несколько несложных действий:

  • Скачайте последнюю версию ModX с официального сайта и следуйте инструкции по установке.

  • Создайте страницы и шаблоны, которые будут участвовать в процессе регистрации пользователей.

  • Если регистрация не настроена, используйте сниппеты и плагины, такие как Login или Register, для добавления стандартного функционала регистрации.

Регистрация и настройка API в МТС Exolve

Для того, чтобы подключить сервис SMS-подтверждения от МТС Exolve, надо зарегистрироваться на платформе и получить доступ к API.

  • пройдите регистрацию на сайте Exolve;

  • в личном кабинете платформы создайте приложение и получите API-ключ, который будете использовать для отправки запросов на SMS-подтверждение;

  • подключите нужные сервисы: номер, имя отправителя для создания авторизационных SMS (согласуйте шаблон с переменными у операторов) и параметры SMS-шлюза.

Подготовка сервера для взаимодействия с API

ModX работает на PHP, поэтому для интеграции нужно настроить сервер так, чтобы он мог отправлять HTTP-запросы к API МТС Exolve. Так что убедитесь, что на вашем сервере установлены необходимые библиотеки для работы с HTTP-запросами. Например, библиотека cURL будет полезна для отправки запросов к API МТС Exolve. Удостоверьтесь, что PHP поддерживает обработку JSON (обычно это встроено, но стоит проверить).

Создание PHP-класса для работы с МТС Exolve

В ModX вам нужно будет создать пользовательский сниппет или подключить кастомный PHP-код, который будет взаимодействовать с API МТС Exolve для отправки SMS.

Выглядеть это будет примерно так:

class SMSExolve {
	private $api_url = 'https://api.exolve.mts.ru/send'; // Пример URL API
	private $api_key = 'ВАШ_API_КЛЮЧ';
	
	public function sendSMS($phoneNumber, $message) {
    	$data = [
        	'phone' => $phoneNumber,
        	'message' => $message,
        	'api_key' => $this->api_key,
    	];
    	
    	$ch = curl_init($this->api_url);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    	curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    	curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    	
    	$response = curl_exec($ch);
    	curl_close($ch);
    	
    	return json_decode($response, true);
	}
}

Этот класс отправляет POST-запрос к API для отправки SMS с заданным номером телефона и текстом сообщения. Убедитесь, что вы подставили корректные параметры API и настройки из кабинета МТС Exolve.

Интеграция класса в процесс регистрации ModX

Теперь нужно интегрировать функции SMS в процесс регистрации на сайте ModX. Откройте сниппет или контроллер, который обрабатывает регистрацию пользователя. В нужном месте (после создания аккаунта) добавьте вызов функции для отправки SMS. Например, так:

$SMS = new SMSExolve();
$result = $SMS->sendSMS($phoneNumber, 'Ваш код подтверждения: 1234');
 
if($result['status'] === 'success') {
	// Продолжаем регистрацию
} else {
	// Обрабатываем ошибку
}

Теперь надосоздать уникальный код для каждого пользователя и сохранить его в базе данных или в сессии пользователя. Этот код будет отправлен через SMS, и пользователь должен будет его ввести на сайте для завершения регистрации.

Пример генерации кода:

$confirmationCode = rand(1000, 9999); // Генерация случайного 4-значного кода
$_SESSION['confirmation_code'] = $confirmationCode; // Сохранение кода в сессии

Создание формы для подтверждения кода

После того, как пользователь получил SMS с кодом, ему нужно ввести этот код на сайте. Для этого потребуется сделать форму на одной из страниц сайта.

Пример формы:

Обработка кода подтверждения

Создайте PHP-код для проверки введённого кода с тем, который был отправлен через SMS. Выглядеть это будет следующим образом:

session_start();
 
if ($_POST['confirmation_code'] == $_SESSION['confirmation_code']) {
	// Код верный, завершить регистрацию
	echo "Регистрация завершена!";
} else {
	// Код неверный
	echo "Неправильный код!";
}

Осталось протестировать работу системы, и, если все нормально, можно утверждать, что SMS-регистрация пользователей на сайте готова.

Настройка SMS-аутентификации пользователя на сайте ModX с использованием API МТС Exolve

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

Подготовка к работе с API МТС Exolve

Поскольку регистрацию с помощью SMS уже настроили, остаётся получить доступ к API МТС Exolve и API-ключ. При настройке SMS-аутентификации используется тот же ключ, что и для SMS-регистрации.

Создание PHP-класса для работы с API

Если у вас уже есть класс для работы с API (который используется для регистрации), вы можете его переиспользовать, слегка модифицировав под нужды аутентификации. Пример простого PHP-класса для отправки SMS рассмотрен в предыдущем разделе.

Что здесь важно:

  • Вы используете API для отправки SMS с кодом подтверждения.

  • API-ключ уже готов к работе.

  • Метод sendSMS будет отправлять SMS с кодом на номер телефона пользователя.

Генерация кода подтверждения

Каждый раз, когда пользователь пытается войти на сайт, нужно сгенерировать уникальный код для подтверждения личности. Этот код будет отправлен по SMS. Этот вопрос был решен при настройке SMS-подтверждения регистрации.

Модификация процесса авторизации в ModX

Теперь нужно настроить процесс авторизации на сайте так, чтобы после ввода логина и пароля пользователь получал SMS с кодом, который ему нужно ввести для завершения входа. Для этого измените стандартный процесс авторизации. Если вы используете стандартный сниппет Login для авторизации, вам нужно добавить этап отправки SMS после успешного ввода логина и пароля.

Пример кода для авторизации:

// Проверка логина и пароля пользователя
if ($userAuthenticated) {
	$phoneNumber = $user->get('phone'); // Получаем номер телефона пользователя
	
	// Генерируем и отправляем код по SMS
	$SMS = new SMSExolve();
	$authCode = rand(1000, 9999);
	$_SESSION['auth_code'] = $authCode; // Сохраняем код в сессии
	
	$SMS->sendSMS($phoneNumber, "Ваш код для входа: $authCode");
	
	// Перенаправляем пользователя на страницу ввода кода
	$modx->sendRedirect('enter-code.html');
} else {
	// Логин или пароль неверные
	echo "Неверный логин или пароль";
}

Создание страницы для ввода кода подтверждения:

На сайте вам понадобится отдельная страница, где пользователь сможет ввести полученный по SMS код. Ранее мы делали такую страницу для SMS-подтверждения регистрации. Теоретически можно ее же и использовать, но есть нюансы.

1. Различие контекста запросов:

  • Подтверждение регистрации — это процесс, в котором пользователь уже ввел свои регистрационные данные, и система отправляет ему SMS-код для подтверждения личности перед окончательной регистрацией.

  • Аутентификация через SMS — это процесс, при котором пользователь уже зарегистрирован и вводит код, чтобы подтвердить свою личность при входе на сайт.

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

2. Техническая реализация (с точки зрения логики):

Оба процесса могут быть интегрированы в одну форму, если на стороне сервера:

  • Хранится информация о том, в каком состоянии находится пользователь (например, только что зарегистрирован или уже зарегистрирован, но не авторизован).

  • На сервере можно различить контекст вызова формы: используется ли она для регистрации или для аутентификации.

3. Пример использования одной формы:

  • Форма может состоять из одного поля для ввода SMS-кода и скрытого поля или параметра, передающего информацию о типе действия (регистрация или аутентификация).

  • На сервере вы обрабатываете этот параметр и в зависимости от него выполняете соответствующее действие.

4. Преимущества одной формы:

  • Меньше кода и унифицированный пользовательский интерфейс.

  • Легче поддерживать и изменять в будущем, если логика обработки SMS-кодов изменится.

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

Проверка кода аутентификации

Когда пользователь вводит код из SMS, нужно сравнить его с кодом, который был сгенерирован и сохранён в сессии.

Пример обработки кода:

session_start();
 
if ($_POST['auth_code'] == $_SESSION['auth_code']) {
	// Код правильный, завершить авторизацию
	echo "Вы успешно вошли!";
	
	// Очистить код из сессии
	unset($_SESSION['auth_code']);
} else {
	// Код неверный
	echo "Неправильный код!";
}

Улучшение безопасности и производительности

Для повышения безопасности установите время действия кода (например, 5–10 минут). Используйте timestamp для этого:

$_SESSION['auth_code_expiry'] = time() + 300; // Код действителен 5 минут

При проверке кода:

if (time() > $_SESSION['auth_code_expiry']) {
	echo "Код просрочен!";
}

Введите ограничение на количество попыток ввода кода, чтобы защититься от перебора:

if (!isset($_SESSION['auth_attempts'])) {
	$_SESSION['auth_attempts'] = 0;
}
$_SESSION['auth_attempts']++;
 
if ($_SESSION['auth_attempts'] > 3) {
	echo "Превышено количество попыток!";
	// Заблокировать пользователя или предложить повторно войти
}

В завершение протестируйте работу кода, настройте запись логов при отправке и получении SMS, а также при вводе кодов пользователями. Не забывайте контролировать статус ответа от API Exolve, чтобы реагировать на возможные проблемы с отправкой SMS.

Интеграция с Exolve обеспечивает надёжную и быструю отправку SMS-сообщений, что улучшает безопасность и пользовательский опыт. Платформа поддерживает стабильную связь с операторами и гарантирует максимальную доставляемость.

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

© Habrahabr.ru