Как настроить регистрацию и аутентификацию на Drupal с помощью SMS API

от автора

Подтверждение регистрации и аутентификация через 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:

  1. Переходим на страницу модуля SMS Framework на Drupal.org и его скачиваем. При желании можно использовать Composer:

 ```bash  composer require drupal/smsframework  ```
  1. Устанавливаем модуль для 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.

Настройка подтверждения регистрации

Чтобы настроить подтверждение регистрации, снова придется немного повозиться. Выглядеть все будет примерно так:

  1. Делаем кастомный модуль для подтверждения регистрации. Создайте папку для вашего модуля в `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
  1. Создаем файл модуля `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);  }
  1. Для обработки подтверждение кода создаем форму для ввода кода и обработчик для проверки введенного кода.

Завершение и тестирование

Переходим в административную панель и активируем модуль `Registration Confirmation`. Осталось зарегистрировать нового пользователя и убедиться, что SMS отправляется корректно и пользователь может подтвердить регистрацию с помощью кода.

Преимущества подтверждения регистрации и аутентификации пользователей через API

SMS-шлюзов сейчас более чем достаточно, но вариант с API-платформой даёт немало преимуществ.

Упрощённое управление и масштабируемость

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

Расширенные функциональные возможности

Часто есть все средства для различных сценариев использования, таких как двухфакторная аутентификация (2FA), проверка номера телефона, уведомления и др. Помимо этого, можно легко настроить шаблоны сообщений и персонализацию.

Отчётность и аналитика

Платформы предоставляют подробные отчёты по доставке сообщений, что помогает отслеживать эффективность и выявлять проблемы. В архиве сохраняется история сообщений, есть журнал событий.

Техническая поддержка и документация

Например, в МТС Exolve чёткая, внятная документация с технической поддержкой.

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

Надеюсь, эта статья поможет вам с настройкой интеграции. Учитывайте, пожалуйста, что приведенный код надо корректировать, чтобы он соответствовал требованиям вашего сайта, CMS и провайдера.

Автор: Роман Андреев


ссылка на оригинал статьи https://habr.com/ru/articles/846438/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *