В современных проектах на WordPress часто возникает необходимость упростить процесс входа для пользователей, например, добавить авторизацию с помощью телефонного номера вместо классического логина и пароля. Это повышает удобство и безопасность, а также снижает порог входа для новых пользователей. В этой статье разберем, как реализовать авторизацию по номеру телефона, какие есть готовые решения и как сделать это программно с примерами.
Зачем нужна авторизация по номеру телефона в WordPress
Авторизация по телефону – это быстрый способ войти на сайт, используя номер мобильного, а не email или логин. Особенно актуально для сайтов с мобильной аудиторией, сервисов с короткими регистрациями, форумов, маркетплейсов и т.д.
Преимущества:
- Удобство для пользователя – не нужно запоминать пароль.
- Увеличение конверсии регистрации и входа.
- Повышение безопасности – подтверждение через SMS или одноразовый код.
Готовые плагины для авторизации по телефону в WordPress
Сразу стоит отметить, что реализовать полноценную авторизацию по номеру телефона в WordPress можно с помощью специальных плагинов. Вот несколько популярных решений:
1. User Registration – Phone Verification Addon
Плагин расширяет форму регистрации и входа, добавляя проверку номера телефона через SMS. Поддерживает интеграцию с Twilio, Nexmo и другими SMS API.
Плюсы: простота настройки, совместимость с популярными плагинами регистрации.
2. WP SMS Login
Позволяет пользователям входить на сайт, используя только номер телефона и код подтверждения, отправляемый SMS.
3. MiniOrange OTP Verification
Поддерживает авторизацию и регистрацию с подтверждением по одноразовому паролю (OTP), отправляемому на телефон.
Все эти плагины можно найти на WPSHOP и использовать в своем проекте.
Как самостоятельно реализовать авторизацию по номеру телефона в WordPress
Если готовые плагины не подходят или нужен более тонкий контроль, можно создать кастомное решение. Ниже пример реализации логики авторизации с использованием SMS-кода через API сервиса (например, Twilio).
Шаг 1. Добавляем поле номера телефона в форму входа
Для начала расширим стандартную форму входа WordPress, добавив поле для ввода телефона.
function wpstudy_add_phone_field_to_login() {
?>
<p>
<label for="user_phone">Телефон</label><br/>
<input type="text" name="user_phone" id="user_phone" class="input" value="" size="20" />
</p>
<?php
}
add_action('login_form', 'wpstudy_add_phone_field_to_login');
Шаг 2. Отправляем SMS с кодом подтверждения
После ввода номера телефона пользователь получает SMS с одноразовым кодом. Для этого используем API SMS-провайдера, например, Twilio. Код нужно сгенерировать и сохранить в сессии для проверки.
function wpstudy_send_sms_code($phone) {
$code = rand(100000, 999999);
$_SESSION['wpstudy_sms_code'] = $code;
$_SESSION['wpstudy_phone'] = $phone;
// Интеграция с Twilio (пример)
$sid = 'YOUR_TWILIO_SID';
$token = 'YOUR_TWILIO_TOKEN';
$twilio = new Twilio\Rest\Client($sid, $token);
$message = $twilio->messages
->create($phone, // to
[
'from' => 'YOUR_TWILIO_PHONE',
'body' => "Ваш код для входа: $code"
]
);
}
Шаг 3. Проверяем код и логиним пользователя
После того, как пользователь ввел код, сравниваем его с сохранённым в сессии и находим пользователя по номеру телефона в базе WordPress. Если совпадает – авторизуем.
function wpstudy_handle_phone_login() {
if (!empty($_POST['user_phone']) && !empty($_POST['sms_code'])) {
session_start();
$phone = sanitize_text_field($_POST['user_phone']);
$code = sanitize_text_field($_POST['sms_code']);
if (isset($_SESSION['wpstudy_sms_code']) && $_SESSION['wpstudy_sms_code'] == $code && $_SESSION['wpstudy_phone'] == $phone) {
// Поиск пользователя по мета-данным телефона
$user_query = new WP_User_Query([
'meta_key' => 'phone_number',
'meta_value' => $phone
]);
$users = $user_query->get_results();
if (!empty($users)) {
$user = $users[0];
wp_set_auth_cookie($user->ID);
wp_redirect(home_url());
exit;
} else {
echo '<p>Пользователь с таким номером не найден.</p>';
}
} else {
echo '<p>Неверный код.</p>';
}
}
}
add_action('login_form_login', 'wpstudy_handle_phone_login');
Как сохранить номер телефона у пользователя
Чтобы авторизация по телефону работала, нужно хранить номера в пользовательских мета-данных. Можно добавить поле телефона в профиль пользователя:
function wpstudy_add_phone_field_to_profile($user) {
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="phone_number">Телефон</label></th>
<td>
<input type="text" name="phone_number" id="phone_number" value="<?php echo esc_attr(get_user_meta($user->ID, 'phone_number', true)); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wpstudy_add_phone_field_to_profile');
add_action('edit_user_profile', 'wpstudy_add_phone_field_to_profile');
function wpstudy_save_phone_field($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
update_user_meta($user_id, 'phone_number', sanitize_text_field($_POST['phone_number']));
}
add_action('personal_options_update', 'wpstudy_save_phone_field');
add_action('edit_user_profile_update', 'wpstudy_save_phone_field');
Советы по безопасности и удобству
При реализации авторизации по телефону важно учитывать несколько моментов:
- Используйте надежного SMS-провайдера с хорошей доставляемостью.
- Добавьте ограничение по числу попыток ввода кода, чтобы избежать брутфорса.
- Обязательно проверяйте формат номера и нормализуйте его (например, в международном формате).
- Реализуйте таймер повторной отправки SMS, чтобы не перегружать сервис и не раздражать пользователя.
- При необходимости дополняйте вход проверкой reCAPTCHA или другими методами защиты.
Интеграция с плагинами WPSHOP
Если на вашем сайте используется плагин WPRemark для комментариев, можно расширить функционал авторизации и там, добавив поддержку входа через телефон. Это повысит вовлеченность пользователей при оставлении отзывов и комментариев.
Также для комплексной работы с пользовательскими данными можно использовать Clearfy Pro, который поможет оптимизировать безопасность и настройки сайта.
Вывод
Авторизация по телефонному номеру в WordPress — мощный инструмент для улучшения UX и безопасности сайта. Используйте готовые решения или создавайте свой функционал, основываясь на приведённых примерах. Помните о безопасности и удобстве для пользователей, и ваш проект станет более современным и конкурентоспособным.