Авторизация пользователей по телефону становится все более востребованной функцией на современных сайтах. В WordPress это не стандартный функционал, но с помощью плагинов и кастомного кода можно легко реализовать удобный и безопасный вход по номеру телефона вместо логина и пароля.
Почему стоит использовать телефон для авторизации в WordPress
Телефонный номер — это уникальный идентификатор, который пользователь обычно всегда помнит и носит с собой. Использование телефона для входа упрощает процесс авторизации, снижает число забытых паролей и повышает безопасность за счет подтверждения через SMS или мессенджеры.
Кроме того, авторизация по телефону отлично подходит для мобильных пользователей и может быть частью стратегии упрощения UX. Особенно это актуально для сайтов с регистрацией клиентов, интернет-магазинов, сервисов подписки и пр.
Популярные плагины для авторизации по телефону в WordPress
Для реализации авторизации по телефону можно использовать готовые решения, которые значительно ускоряют процесс внедрения:
- WP SMS Login — плагин, который добавляет возможность входа по номеру телефона с подтверждением SMS-кодом. Поддерживает несколько SMS-шлюзов.
- Nextend Social Login and Register — расширяется дополнительными модулями для входа через телефон и соцсети.
- Miniorange OTP Verification — позволяет настроить двухфакторную аутентификацию с помощью одноразового кода, отправляемого на телефон.
- My Popup — подходит для создания кастомных форм, в том числе с вводом телефона и отправкой OTP через сторонние сервисы.
Все эти плагины имеют гибкие настройки, но иногда требуется интеграция с уникальными бизнес-процессами, тогда лучше использовать кастомный код.
Пример реализации авторизации по телефону с помощью кода на PHP
Рассмотрим простой пример, как создать форму входа по телефону с отправкой и проверкой одноразового кода (OTP) через SMS-сервис. Для отправки SMS можно использовать сторонние API, например, sms.ru или Twilio.
Основная логика:
- Пользователь вводит номер телефона.
- Система генерирует OTP и отправляет на телефон.
- Пользователь вводит полученный код.
- Если код верный — создается или находится пользователь с таким номером и происходит вход.
Регистрация и отправка OTP
add_action('wp_ajax_wpexperts_send_otp', 'wpexperts_send_otp');
add_action('wp_ajax_nopriv_wpexperts_send_otp', 'wpexperts_send_otp');
function wpexperts_send_otp() {
if ( ! isset($_POST['phone']) ) {
wp_send_json_error('Телефон не указан');
}
$phone = sanitize_text_field($_POST['phone']);
// Генерируем код
$otp = rand(100000, 999999);
// Сохраняем код и время в сессии
session_start();
$_SESSION['wpexperts_otp'] = $otp;
$_SESSION['wpexperts_otp_phone'] = $phone;
$_SESSION['wpexperts_otp_time'] = time();
// Отправка SMS через API (пример)
$message = "Ваш код подтверждения: $otp";
// Здесь интеграция с API SMS
wp_send_json_success('Код отправлен');
}Проверка OTP и авторизация пользователя
add_action('wp_ajax_wpexperts_verify_otp', 'wpexperts_verify_otp');
add_action('wp_ajax_nopriv_wpexperts_verify_otp', 'wpexperts_verify_otp');
function wpexperts_verify_otp() {
session_start();
if ( ! isset($_POST['otp']) || ! isset($_POST['phone']) ) {
wp_send_json_error('Данные не переданы');
}
$otp = sanitize_text_field($_POST['otp']);
$phone = sanitize_text_field($_POST['phone']);
if ( ! isset($_SESSION['wpexperts_otp'], $_SESSION['wpexperts_otp_phone'], $_SESSION['wpexperts_otp_time']) ) {
wp_send_json_error('Код не найден, запросите снова');
}
if ( time() - $_SESSION['wpexperts_otp_time'] > 300 ) { // 5 минут
wp_send_json_error('Код истек');
}
if ( $otp != $_SESSION['wpexperts_otp'] || $phone != $_SESSION['wpexperts_otp_phone'] ) {
wp_send_json_error('Неверный код');
}
// Ищем пользователя по мета с телефоном
$user_query = new WP_User_Query(array(
'meta_key' => 'wpexperts_phone',
'meta_value' => $phone,
'number' => 1
));
$users = $user_query->get_results();
if ( empty($users) ) {
// Создаем нового пользователя
$user_id = wp_create_user($phone, wp_generate_password());
update_user_meta($user_id, 'wpexperts_phone', $phone);
} else {
$user_id = $users[0]->ID;
}
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
// Очищаем сессию
unset($_SESSION['wpexperts_otp'], $_SESSION['wpexperts_otp_phone'], $_SESSION['wpexperts_otp_time']);
wp_send_json_success('Авторизация успешна');
}Интеграция с формами и фронтендом
Для удобства пользователей можно создать всплывающее окно или страницу с формой для ввода телефона и кода. Например, с помощью плагина My Popup легко сделать кастомное окно с двумя шагами — ввод номера и ввод кода.
Код JavaScript для отправки AJAX-запросов будет выглядеть так:
jQuery(document).ready(function($){
$('#send-otp').on('click', function(e){
e.preventDefault();
var phone = $('#phone').val();
$.post(ajaxurl, { action: 'wpexperts_send_otp', phone: phone }, function(response){
if(response.success) {
alert('Код отправлен');
// Показать поле для ввода OTP
} else {
alert('Ошибка: ' + response.data);
}
});
});
$('#verify-otp').on('click', function(e){
e.preventDefault();
var otp = $('#otp').val();
var phone = $('#phone').val();
$.post(ajaxurl, { action: 'wpexperts_verify_otp', otp: otp, phone: phone }, function(response){
if(response.success) {
alert('Вы вошли');
location.reload();
} else {
alert('Ошибка: ' + response.data);
}
});
});
});Как улучшить и обезопасить авторизацию по телефону
Чтобы сделать авторизацию более надежной, рекомендуется:
- Использовать двухфакторную аутентификацию, например, дополнительно к коду отправлять email-уведомления.
- Ввести ограничение на количество попыток ввода кода для защиты от перебора.
- Использовать надежные SMS-шлюзы с гарантированной доставкой и шифрованием.
- Хранить телефонные номера в метаданных пользователей с шифрованием или хешированием.
- Интегрировать с популярными плагинами безопасности, например, Clearfy Pro, для дополнительного контроля доступа.
В итоге, авторизация по телефону в WordPress — это реальное и полезное улучшение, которое можно внедрить как с помощью готовых плагинов, так и с кастомным кодом. Это повысит удобство пользователей и безопасность сайта.