Как стать автором
Обновить
117.57
Exolve
Конструктор омниканальных диалогов для бизнеса

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

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров172

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

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

Теги:
Хабы:
+6
Комментарии3

Публикации

Информация

Сайт
exolve.ru
Дата основания
Численность
501–1 000 человек