Подтверждение регистрации и аутентификация через SMS API — эффективный инструмент на множестве сайтов. Такая функция помогает уменьшить количество спам-аккаунтов, улучшить взаимодействие с пользователями и предоставить ценные данные для целевых кампаний. Разберёмся, как реализовать такое подтверждение через МТС Exolve на сайтах с Drupal.
Преимущества SMS-подтверждения
Рассмотрим преимущества такого подтверждения подробнее.
Повышение безопасности
Двухфакторная аутентификация (2FA) делает безопаснее работу пользователя с сайтом. SMS-код служит дополнительным уровнем защиты, уменьшая риск несанкционированного доступа, даже если злоумышленник получил доступ к паролю. Отправка кода подтверждения на номер телефона помогает удостовериться, что пользователь владеет указанным номером, снижая вероятность создания фейковых аккаунтов. Но есть много тонкостей, о них коллеги уже говорили.
Улучшение пользовательского опыта
Это простой и быстрый способ подтверждения личности. Большинство пользователей знакомы с процессом получения и ввода SMS-кодов, что делает процесс регистрации и аутентификации интуитивно понятным. Пользователи получают уведомления в режиме реального времени.
Снижение количества фальшивых регистраций
Это хороший способ фильтрации спам-аккаунтов: требование подтверждения по SMS помогает снизить количество автоматических регистраций и спам-аккаунтов, что улучшает качество базы данных пользователей.
Восстановление доступа
SMS можно использовать для отправки кодов восстановления пароля, что упрощает пользователям процесс восстановления доступа к своим учетным записям.
Маркетинговые возможности
Таким способом удобно собирать маркетинговые данные. Номер телефона, подтвержденный через SMS — ценный ресурс. Это позволяет маркетологам отправлять целевые предложения и уведомления, увеличивая вовлеченность пользователей.
Кроме того, SMS позволяет быстро и надежно информировать пользователей о важных событиях, акциях и новостях.
Соответствие требованиям безопасности
В некоторых отраслях, таких как финансы или здравоохранение, подтверждение личности через SMS может быть требованием для соответствия стандартам безопасности и защиты данных.
Аудит и отслеживание
Интеграция с SMS API позволяет вести журналы отправленных кодов и подтверждений, что упрощает аудит безопасности и отслеживание подозрительной активности.
Очевидно, что все эти преимущества стоят того, чтобы внедрить их у себя. Более того, без использования регистрации и аутентификация через SMS вряд ли получится создать коммерчески успешный сайт.
Как сделать подтверждение регистрации и аутентификацию через SMS на CMS Drupal
Интеграция SMS-подтверждения имеет два ограничения: используемый SMS-шлюз и движок сайта. В этой статье мы рассмотрим вариант для Drupal и API-платформы МТС Exolve.
Установка модулей
Начнем с установки модуля SMS Framework:
Переходим на страницу модуля SMS Framework на Drupal.org и его скачиваем. При желании можно использовать Composer:
```bash
composer require drupal/smsframework
```
Устанавливаем модуль для SMS API провайдера, в нашем случае МТС Exolve. Здесь придется повозиться. Прежде чем начинать, установите и настройте Drupal 9 или 10.
Шаг 1. Подготовка к работе с API МТС Exolve
Зарегистрируйтесь на сайте МТС Exolve и получите учетные данные для API.
Шаг 2. Создание кастомного модуля для интеграции с API МТС Exolve.
Создаем структуру модуля:
Перейдите в директорию `modules/custom` вашего сайта Drupal.
Создайте новую папку для вашего модуля, например, `mts_sms`.
Внутри папки `mts_sms` создайте файл `mts_sms.info.yml` со следующим содержимым:
```yaml
name: 'MTS SMS Integration'
type: module
description: 'Module for SMS registration confirmation using MTS Exolve API.'
core_version_requirement: ^9 || ^10
package: Custom
dependencies:
- drupal/user
Создаем файл модуля `mts_sms.module`.
Внутри папки `mts_sms` создайте файл `mts_sms.module` и добавьте следующий код:
<?php
use Drupal\Core\Form\FormStateInterface;
use Drupal\user\Entity\User;
/**
* Implements hook_form_alter() to modify user registration form.
*/
function mts_sms_form_user_register_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Add a phone number field to the registration form.
$form['phone_number'] = [
'#type' => 'tel',
'#title' => t('Phone Number'),
'#required' => TRUE,
];
// Add a submit handler to the registration form.
$form['#submit'][] = 'mts_sms_user_register_form_submit';
}
/**
* Submit handler for user registration form.
*/
function mts_sms_user_register_form_submit($form, FormStateInterface $form_state) {
// Get the phone number from the form.
$phone_number = $form_state->getValue('phone_number');
// Generate a random confirmation code.
$confirmation_code = rand(100000, 999999);
// Save the confirmation code to the user's session.
\Drupal::service('user.private_tempstore')->get('mts_sms')->set('confirmation_code', $confirmation_code);
// Send the confirmation code via SMS.
$api_key = 'YOUR_API_KEY';
$api_secret = 'YOUR_API_SECRET';
$sender = 'YourSenderName';
$message = "Your confirmation code is $confirmation_code";
mts_sms_send_sms($api_key, $api_secret, $phone_number, $sender, $message);
}
/**
* Function to send SMS via MTS Exolve API.
*/
function mts_sms_send_sms($api_key, $api_secret, $phone_number, $sender, $message) {
$url = 'https://api.mts.exolve.ru/sms/send';
$data = [
'api_key' => $api_key,
'api_secret' => $api_secret,
'to' => $phone_number,
'sender' => $sender,
'message' => $message,
];
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
],
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) {
\Drupal::logger('mts_sms')->error('Failed to send SMS.');
} else {
\Drupal::logger('mts_sms')->notice('SMS sent successfully.');
}
}
Создаем файл `mts_sms_confirm.module` для обработки ввода и проверки кода подтверждения:
<?php
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
/**
* Implements a form to confirm the registration code.
*/
class ConfirmCodeForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'confirm_code_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['confirmation_code'] = [
'#type' => 'textfield',
'#title' => $this->t('Confirmation Code'),
'#required' => TRUE,
];
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Confirm'),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$entered_code = $form_state->getValue('confirmation_code');
$stored_code = \Drupal::service('user.private_tempstore')->get('mts_sms')->get('confirmation_code');
if ($entered_code == $stored_code) {
\Drupal::messenger()->addMessage($this->t('Registration confirmed successfully.'));
// Complete the user registration process here.
} else {
\Drupal::messenger()->addError($this->t('Invalid confirmation code.'));
}
}
}
Регистрируем маршрут для подтверждения кода, для чего создаем файл `mts_sms.routing.yml` и добавляем следующий код:
```yaml
confirm_code.form:
path: '/confirm-code'
defaults:
_form: '\Drupal\mts_sms\Form\ConfirmCodeForm'
_title: 'Confirm Registration Code'
requirements:
_permission: 'access content'
Шаг 3. Активация и настройка модуля
Активируем и настраиваем модуль. Для активации перейдите в административную панель Drupal и активируйте модуль `MTS SMS Integration`. Далее перейдите на страницу регистрации и зарегистрируйте нового пользователя. Остается проверить, как оно работает: отправляем SMS с кодом подтверждения на введённый номер, переходим на страницу `/confirm-code`, вводим полученный код и смотрим результат.
Учитывайте, что инструкция для интеграции с SMS API в Drupal предельно обобщенная. Весьма вероятно, что понадобится дополнительная настройка и доработка в зависимости от специфики вашего проекта и ваших требований.
Устанавливаем модуль для двухфакторной аутентификации: переходим на страницу модуля [TFA (Two-factor Authentication) ] и просто скачиваем его.
Все, необходимые модули установлены.
Настройка SMS Framework
В административной панели Drupal активируем установленные модули `SMS Framework`,`SMS МТС Exolve` и `TFA`. После этого настраиваем SMS Gateway. Переходим в `Configuration` -> `SMS Framework` -> `Gateways`; нажимаем `Add Gateway` и выбираем МТС Exolve, после чего вводим данные, которые нам выдали при регистрации на API-платформе.
Настройка двухфакторной аутентификации (2FA)
Чтобы настроить TFA модуль, перейдите в `Configuration` -> `People` -> `Two-factor Authentication`. В разделе `Plugin settings` выберите `SMS` как метод аутентификации и настройте отправку SMS с использованием ранее настроенного SMS Gateway.
Настройка подтверждения регистрации
Чтобы настроить подтверждение регистрации, снова придется немного повозиться. Выглядеть все будет примерно так:
Делаем кастомный модуль для подтверждения регистрации. Создайте папку для вашего модуля в `modules/custom` и создайте файл с именем `registration_confirm.info.yml`:
```yaml
name: 'Registration Confirmation'
type: module
description: 'Module for SMS registration confirmation.'
core_version_requirement: ^8 || ^9
package: Custom
dependencies:
- drupal/smsframework
Создаем файл модуля `registration_confirm.module`, в котором будем обрабатывать регистрацию пользователя и отправку SMS:
<?php
use Drupal\Core\Form\FormStateInterface;
use Drupal\user\Entity\User;
use Drupal\sms\Message\SmsMessage;
/**
* Implements hook_form_alter() to modify user registration form.
*/
function registration_confirm_form_user_register_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Add a phone number field to the registration form.
$form['phone_number'] = [
'#type' => 'tel',
'#title' => t('Phone Number'),
'#required' => TRUE,
];
// Add a submit handler to the registration form.
$form['#submit'][] = 'registration_confirm_user_register_form_submit';
}
/**
* Submit handler for user registration form.
*/
function registration_confirm_user_register_form_submit($form, FormStateInterface $form_state) {
// Get the phone number from the form.
$phone_number = $form_state->getValue('phone_number');
// Generate a random confirmation code.
$confirmation_code = rand(100000, 999999);
// Save the confirmation code to the user's session.
\Drupal::service('user.private_tempstore')->get('registration_confirm')->set('confirmation_code', $confirmation_code);
// Send the confirmation code via SMS.
$message = new SmsMessage();
$message->setRecipient($phone_number);
$message->setBody(t('Your confirmation code is @code', ['@code' => $confirmation_code]));
\Drupal::service('smsprovider')->sendMessage($message);
}
Для обработки подтверждение кода создаем форму для ввода кода и обработчик для проверки введенного кода.
Завершение и тестирование
Переходим в административную панель и активируем модуль `Registration Confirmation`. Осталось зарегистрировать нового пользователя и убедиться, что SMS отправляется корректно и пользователь может подтвердить регистрацию с помощью кода.
Преимущества подтверждения регистрации и аутентификации пользователей через API
SMS-шлюзов сейчас более чем достаточно, но вариант с API-платформой даёт немало преимуществ.
Упрощённое управление и масштабируемость
Такие платформы предлагают удобные и комплексные панели управления, что упрощает администрирование и мониторинг SMS-сообщений. С API легче масштабировать сервис при увеличении количества пользователей.
Расширенные функциональные возможности
Часто есть все средства для различных сценариев использования, таких как двухфакторная аутентификация (2FA), проверка номера телефона, уведомления и др. Помимо этого, можно легко настроить шаблоны сообщений и персонализацию.
Отчётность и аналитика
Платформы предоставляют подробные отчёты по доставке сообщений, что помогает отслеживать эффективность и выявлять проблемы. В архиве сохраняется история сообщений, есть журнал событий.
Техническая поддержка и документация
Например, в МТС Exolve чёткая, внятная документация с технической поддержкой.
Выбор между интеграцией с API-платформой и обычным SMS-шлюзом зависит от конкретных потребностей и ресурсов вашего проекта. API-платформа подходит для более сложных и масштабируемых проектов, где важны расширенные функции и безопасность, тогда как обычный SMS-шлюз может подойти для небольших и менее сложных задач с ограниченным бюджетом.
Надеюсь, эта статья поможет вам с настройкой интеграции. Учитывайте, пожалуйста, что приведенный код надо корректировать, чтобы он соответствовал требованиям вашего сайта, CMS и провайдера.
Автор: Роман Андреев
ramil_trinion
Блин, большушее спасибо! Мы используем https://www.drupal.org/project/email_registration
Что скажете про него?
michabramov Автор
Добротный модуль, со своей задачей справляется. Юзерам, опять же проще: и полей поменьше, и мучиться с придумыванием имени не надо. Я вижу два жирных минуса: во-первых, выше риски утечки. Взламывают почту нередко, да и человек сам потом не вспомнит, кому он свой email раздавал, а сайт будет назначен крайним. Во-вторых, при переходе на новые версии Drupal, от 10.3 и выше, весьма вероятны проблемы с совместимостью. Так что я голосую за SMS-подтверждения.