Подтверждение регистрации и аутентификация через 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 и провайдера.
Автор: Роман Андреев
ссылка на оригинал статьи https://habr.com/ru/articles/846438/
Добавить комментарий