В современных условиях удобство авторизации на сайте — один из ключевых факторов удержания посетителей. В WordPress стандартный способ входа — через email и пароль. Но что, если вам нужно реализовать авторизацию по номеру телефона? Это удобно, быстро и снижает порог входа для пользователей. В этой статье подробно разберем, как добавить в WordPress возможность входа по телефону, рассмотрим популярные плагины и приведем примеры собственного кода.
Почему авторизация по телефону актуальна для сайтов на WordPress
Авторизация через телефон позволяет упростить регистрацию и вход. Многие пользователи предпочитают получать код по SMS вместо ввода пароля. Это снижает количество забытых паролей и повышает конверсию регистрации. Особенно актуально для интернет-магазинов, сервисов с личным кабинетом и мобильных приложений на базе WordPress.
Кроме того, такой способ позволяет реализовать двухфакторную аутентификацию, повышая безопасность сайта. Также телефон часто является уникальным идентификатором, что упрощает коммуникацию с клиентом.
Но в стандартном WordPress нет поддержки авторизации по телефону, поэтому нам придется использовать плагины или дописывать собственный функционал.
Популярные плагины для авторизации по телефону в WordPress
1. MiniOrange OTP Verification
Этот плагин позволяет реализовать вход и регистрацию по номеру телефона с подтверждением через SMS-код. Поддерживает множество SMS-провайдеров и легко интегрируется с WooCommerce, BuddyPress и другими плагинами.
Основные возможности:
- Подтверждение номера телефона при регистрации;
- Вход с помощью OTP (одноразового пароля);
- Поддержка нескольких SMS-шлюзов;
- Настраиваемые сообщения;
- Двухфакторная аутентификация.
Настройка плагина проста: после установки нужно зарегистрироваться у одного из SMS-провайдеров, указать API-ключ и активировать нужные опции.
2. WordPress OTP Verification (premium)
Платный плагин с более широкими возможностями: можно настроить авторизацию через телефон, email, а также использовать OTP для подтверждения различных действий на сайте. Есть интеграция с WooCommerce, Contact Form 7, и другими популярными расширениями.
Преимущества:
- Гибкая настройка шаблонов SMS и email;
- Поддержка шаблонов для разных стран;
- Интеграция с кастомными формами;
- Отчеты и статистика по отправленным кодам.
Как реализовать авторизацию по телефону в WordPress самостоятельно
Если вы хотите более тонко контролировать процесс или использовать нестандартные решения, можно написать собственный код. Давайте рассмотрим простой пример, как добавить возможность входа по номеру телефона с проверкой через OTP.
Создаем таблицу для хранения телефонов и кодов
Для начала создадим таблицу в базе данных для хранения телефонных номеров, кодов OTP и времени их генерации. Это необходимо для проверки действительности кода.
function wponline_create_otp_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wponline_otp_codes';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id bigint(20) NOT NULL AUTO_INCREMENT,
phone varchar(20) NOT NULL,
otp_code varchar(6) NOT NULL,
created_at datetime NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY phone (phone)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'wponline_create_otp_table');Генерация OTP и отправка SMS
Далее создадим функцию, которая будет генерировать код и отправлять SMS. Для отправки можно использовать любой SMS API, например, Twilio, SMS.ru или другие.
function wponline_generate_and_send_otp($phone) {
global $wpdb;
$table_name = $wpdb->prefix . 'wponline_otp_codes';
$otp = rand(100000, 999999);
$now = current_time('mysql');
// Сохраняем или обновляем код в базе
$wpdb->replace(
$table_name,
[
'phone' => $phone,
'otp_code' => $otp,
'created_at' => $now
],
['%s', '%s', '%s']
);
// Отправка SMS (пример для SMS.ru)
$api_id = 'ВАШ_API_ID';
$message = "Ваш код подтверждения: $otp";
$url = "https://sms.ru/sms/send?api_id=$api_id&to=$phone&msg=" . urlencode($message);
wp_remote_get($url);
return true;
}Форма ввода телефона и проверки OTP
Создаем шорткод, который выведет форму для ввода телефона и поля для ввода OTP. После отправки формы будут вызваны соответствующие функции для генерации кода и проверки.
function wponline_otp_form() {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['phone'])) {
$phone = sanitize_text_field($_POST['phone']);
wponline_generate_and_send_otp($phone);
echo '<p>Код отправлен на номер ' . esc_html($phone) . '</p>';
echo wponline_otp_verification_form($phone);
} elseif (isset($_POST['phone']) && isset($_POST['otp'])) {
$phone = sanitize_text_field($_POST['phone']);
$otp = sanitize_text_field($_POST['otp']);
if (wponline_verify_otp($phone, $otp)) {
echo '<p>Авторизация прошла успешно!</p>';
// Здесь можно авторизовать пользователя или создать сессию
} else {
echo '<p style="color:red;">Неверный код или срок действия истек.</p>';
echo wponline_otp_verification_form($phone);
}
}
} else {
echo '<form method="post"><input type="text" name="phone" placeholder="Введите номер телефона" required><input type="submit" value="Получить код"></form>';
}
}
add_shortcode('wponline_otp', 'wponline_otp_form');
function wponline_otp_verification_form($phone) {
return '<form method="post"><input type="hidden" name="phone" value="' . esc_attr($phone) . '"><input type="text" name="otp" placeholder="Введите код" required><input type="submit" value="Подтвердить"></form>';
}Проверка OTP
Функция проверки сопоставляет введенный код с сохраненным в базе и проверяет, что код не старше 5 минут.
function wponline_verify_otp($phone, $otp) {
global $wpdb;
$table_name = $wpdb->prefix . 'wponline_otp_codes';
$record = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE phone = %s", $phone));
if (!$record) return false;
$created_at = strtotime($record->created_at);
$now = current_time('timestamp');
if ($record->otp_code === $otp && ($now - $created_at) <= 300) { // 5 минут
return true;
}
return false;
}Интеграция авторизации по телефону с пользователями WordPress
Чтобы после успешной проверки OTP автоматически авторизовать пользователя, нужно связать номер телефона с учетной записью. Для этого можно добавить мета-поле для пользователей с номером телефона и расширить функцию верификации.
Для создания пользователя по номеру телефона, если его нет, используйте следующий пример:
function wponline_get_or_create_user_by_phone($phone) {
$users = get_users([
'meta_key' => 'wponline_phone',
'meta_value' => $phone,
'number' => 1
]);
if (!empty($users)) {
return $users[0];
}
$username = 'user_' . preg_replace('/\D/', '', $phone);
if (username_exists($username)) {
$username .= wp_rand(10, 99);
}
$password = wp_generate_password(12, false);
$user_id = wp_create_user($username, $password);
if (!is_wp_error($user_id)) {
update_user_meta($user_id, 'wponline_phone', $phone);
return get_user_by('ID', $user_id);
}
return false;
}После подтверждения OTP можно выполнить вход так:
function wponline_login_user_by_phone($phone) {
$user = wponline_get_or_create_user_by_phone($phone);
if ($user) {
wp_set_current_user($user->ID);
wp_set_auth_cookie($user->ID);
do_action('wp_login', $user->user_login, $user);
return true;
}
return false;
}<Добавьте вызов этой функции после успешной проверки OTP, чтобы пользователь автоматически вошел на сайт.
Выводы и рекомендации
Добавление авторизации по телефону в WordPress — отличное решение для повышения удобства и безопасности сайта. Использование готовых плагинов ускоряет процесс, но если нужна гибкость — можно реализовать функционал самостоятельно.
Обязательно учитывайте особенности SMS-провайдеров и соблюдайте правила GDPR и других законов о персональных данных. Также рекомендуем добавлять возможность резервного входа по email или паролю, чтобы избежать проблем с утерей телефона.
Используйте приведенные примеры, чтобы адаптировать авторизацию под свои задачи и сделать сайт более современным и удобным для пользователей.