WordPress авторизация через SMS и Email с использованием WPQRCode

Авторизация пользователей через SMS и Email – один из эффективных способов повысить безопасность и удобство входа на сайт WordPress. В этой статье мы рассмотрим, как реализовать такую авторизацию с помощью плагина WPQRCode, который позволяет генерировать QR-коды для быстрых и безопасных входов, а также отправлять коды подтверждения через SMS и Email.

Почему стоит использовать WPQRCode для авторизации в WordPress

Плагин WPQRCode расширяет стандартные возможности авторизации, добавляя удобный способ входа с помощью QR-кодов, а также поддержку отправки одноразовых кодов через SMS и Email. Это снижает риски взлома и улучшает пользовательский опыт, особенно для мобильных устройств.

WPQRCode интегрируется с популярными SMS-провайдерами и почтовыми сервисами, обеспечивая надежную доставку кодов подтверждения.

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

Настройка WPQRCode для авторизации через SMS и Email

Для начала необходимо установить и активировать плагин WPQRCode. Его можно найти в официальном каталоге WordPress или на сайте разработчика.

После активации перейдите в раздел настроек плагина и укажите данные для интеграции с SMS-провайдером (например, Twilio или SMS.ru) и SMTP-сервер для отправки Email.

Далее активируйте режим авторизации через SMS и Email в соответствующих настройках, выбрав необходимые опции для генерации и проверки одноразовых кодов.

Пример настройки интеграции с SMS-провайдером

function wpauth_setup_sms_provider() {
    $api_key = 'ВАШ_API_КЛЮЧ';
    $api_secret = 'ВАШ_API_СЕКРЕТ';
    WPQRCode\SMS\Provider::init(["api_key" => $api_key, "api_secret" => $api_secret]);
}
add_action('init', 'wpauth_setup_sms_provider');

Этот код инициализирует подключение к SMS-провайдеру, используя заданные ключи, что позволяет отправлять одноразовые коды на телефон пользователей.

Добавление формы авторизации с поддержкой SMS и Email

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

Пример простой формы с двумя полями: номер телефона и Email, а также кнопками для отправки кода.

<form id="wpauth-login-form" method="post">
    <label for="phone">Номер телефона:</label>
    <input type="text" id="phone" name="phone" required />

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required />

    <button type="submit" name="send_sms_code">Отправить SMS код</button>
    <button type="submit" name="send_email_code">Отправить код на Email</button>
</form>

Обработка формы происходит в функции, которая проверяет введённые данные, генерирует код и отправляет его через выбранный канал.

Пример обработки формы и отправки кода

function wpauth_handle_login_form() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        if (isset($_POST['send_sms_code']) && !empty($_POST['phone'])) {
            $phone = sanitize_text_field($_POST['phone']);
            $code = wp_generate_password(6, false, false); // 6 цифр
            update_user_meta(get_current_user_id(), '_wpauth_sms_code', $code);
            WPQRCode\SMS\Provider::send($phone, "Ваш код для входа: $code");
            echo '<p>Код отправлен на номер ' . esc_html($phone) . '</p>';
        }
        if (isset($_POST['send_email_code']) && !empty($_POST['email'])) {
            $email = sanitize_email($_POST['email']);
            $code = wp_generate_password(6, false, false);
            update_user_meta(get_current_user_id(), '_wpauth_email_code', $code);
            wp_mail($email, 'Код для входа', "Ваш код для входа: $code");
            echo '<p>Код отправлен на Email ' . esc_html($email) . '</p>';
        }
    }
}
add_action('init', 'wpauth_handle_login_form');

Проверка введённого кода и авторизация пользователя

После получения кода пользователь вводит его в специальное поле для подтверждения. Необходимо проверить совпадение кода с тем, что хранится в мета данных пользователя.

function wpauth_verify_code_and_login() {
    if (isset($_POST['verify_code'])) {
        $input_code = sanitize_text_field($_POST['code']);
        $user_id = get_current_user_id();
        $sms_code = get_user_meta($user_id, '_wpauth_sms_code', true);
        $email_code = get_user_meta($user_id, '_wpauth_email_code', true);

        if ($input_code === $sms_code || $input_code === $email_code) {
            wp_clear_auth_cookie();
            wp_set_current_user($user_id);
            wp_set_auth_cookie($user_id);
            echo '<p>Авторизация успешна!</p>';
        } else {
            echo '<p>Неверный код! Попробуйте снова.</p>';
        }
    }
}
add_action('init', 'wpauth_verify_code_and_login');

Таким образом, реализуется надежная авторизация с помощью одноразовых кодов.

Дополнительные советы по безопасности и удобству

Для повышения безопасности рекомендуется ограничивать количество попыток ввода кода и устанавливать время жизни одноразового кода.

Также можно добавить автоматическое удаление устаревших кодов из мета данных пользователей.

Для удобства пользователей реализуйте возможность повторной отправки кода с таймером, чтобы избежать спама.

Пример ограничения попыток ввода кода

function wpauth_limit_attempts() {
    $user_id = get_current_user_id();
    $attempts = (int) get_user_meta($user_id, '_wpauth_attempts', true);
    if ($attempts >= 5) {
        wp_die('Превышено количество попыток. Попробуйте позже.');
    } else {
        update_user_meta($user_id, '_wpauth_attempts', $attempts + 1);
    }
}
add_action('init', 'wpauth_limit_attempts');

Этот код ограничит число попыток ввода кода до 5, что повысит защиту от перебора.

Заключение

Авторизация через SMS и Email с использованием WPQRCode — это современное, удобное и безопасное решение для WordPress сайтов. Оно позволяет минимизировать риски взлома и улучшить пользовательский опыт за счет простого и надежного способа входа.

Для получения плагина WPQRCode и подробной документации посетите официальную страницу плагина.

WordPress авторизация с использованием WebAuthn: настройка и практические примеры
12.03.2026
WordPress REST API: создание кастомной аутентификации по токену
25.01.2026
WordPress двухфакторная аутентификация: локальное решение с примером кода
21.12.2025
Кастомизация процесса восстановления пароля в WordPress: пошаговое руководство
03.03.2026
WordPress удаление пользователя при удалённом запросе: практическое руководство
06.12.2025