Авторизация пользователей через 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 и подробной документации посетите официальную страницу плагина.