wpcontrol.ru wordpress WPControl.ru

Как использовать хук wp_login_form_submit для дополнительной проверки при входе в WordPress

В WordPress стандартный процесс авторизации иногда требует дополнительной проверки данных пользователя перед тем, как разрешить вход. Например, нужно проверить кастомное поле, сделать проверку по IP или провести дополнительную валидацию. Для этого можно использовать хук wp_login_form_submit, который срабатывает при отправке формы входа.

Что такое хук wp_login_form_submit и где он применяется

Хук wp_login_form_submit — это фильтр, который вызывается при обработке данных формы входа wp-login.php. Он позволяет вмешаться в процесс аутентификации, изменить или дополнить стандартную проверку логина и пароля. Это особенно полезно, если стандартной проверки недостаточно, и необходимо выполнить дополнительные действия.

Важно: этот хук применяется только при использовании стандартной формы входа WordPress. Если вы используете кастомные формы или плагины авторизации, может быть другой механизм.

Пример использования хука для дополнительной валидации

Рассмотрим простой пример, когда нужно проверить, что пользователь вводит определённый дополнительный ключ в форме. Для этого сначала добавим дополнительное поле в форму входа, а затем проверим его через хук wp_login_form_submit.

Добавление дополнительного поля в форму входа

Для добавления поля воспользуемся хуком login_form и выведем дополнительный input:

add_action('login_form', 'wpcontrol_add_custom_login_field');
function wpcontrol_add_custom_login_field() {
    ?>
    <p>
        <label for="login_custom_key">Дополнительный ключ<br>
            <input type="text" name="login_custom_key" id="login_custom_key" class="input" size="20" />
        </label>
    </p>
    <?php
}

Это поле появится на странице входа под стандартными полями логина и пароля.

Обработка дополнительного поля через wp_login_form_submit

Теперь необходимо проверить значение поля login_custom_key. Для этого используем фильтр wp_login_form_submit:

add_filter('wp_login_form_submit', 'wpcontrol_check_custom_login_key', 10, 2);
function wpcontrol_check_custom_login_key($form, $args) {
    if (isset($_POST['login_custom_key'])) {
        $custom_key = sanitize_text_field($_POST['login_custom_key']);

        // Проверяем, что ключ совпадает с нужным значением
        if ($custom_key !== 'my_secret_key') {
            // Добавляем ошибку и блокируем вход
            add_filter('wp_authenticate_user', function($user) {
                return new WP_Error('custom_key_error', __('Ошибка: неверный дополнительный ключ.'));
            });
        }
    }
    return $form;
}

Здесь мы проверяем значение поля, и если оно не совпадает с ожидаемым, добавляем ошибку, используя фильтр wp_authenticate_user. Это прервет успешный вход и выведет ошибку.

Пример более сложной проверки — блокировка по IP

Часто нужно ограничить вход для определенных IP-адресов. Это тоже можно реализовать с помощью того же фильтра:

add_filter('wp_login_form_submit', 'wpcontrol_block_ip_on_login', 10, 2);
function wpcontrol_block_ip_on_login($form, $args) {
    $blocked_ips = ['123.123.123.123', '111.111.111.111']; // список запрещенных IP
    $user_ip = $_SERVER['REMOTE_ADDR'];

    if (in_array($user_ip, $blocked_ips)) {
        add_filter('wp_authenticate_user', function($user) {
            return new WP_Error('ip_blocked', __('Доступ запрещен с вашего IP-адреса.'));
        });
    }
    return $form;
}

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

Полезные советы по работе с хуком и дополнительными проверками

  • Всегда используйте санитизацию данных — обязательно фильтруйте и очищайте данные из формы перед использованием, чтобы избежать уязвимостей.
  • Используйте WP_Error для ошибок — возвращайте ошибки именно через WP_Error, чтобы WordPress корректно их отображал.
  • Тестируйте на разных сценариях входа — особенно если у вас есть несколько плагинов, которые могут влиять на авторизацию.
  • Логируйте ошибки и попытки входа — это поможет отследить и предотвратить нежелательную активность.

Альтернативные плагины для расширения функционала авторизации

Если хочется получить расширенные возможности без программирования, можно обратить внимание на плагины из магазина WPSHOP.RU:

  • Clearfy Pro — расширяет безопасность и оптимизацию, есть модули для контроля входов;
  • Expert Review — для сбора отзывов, но включает элементы контроля пользователей;
  • WPRemark — отзывчивое решение для взаимодействия с пользователями;
  • My Popup — для вывода уведомлений и подсказок, которые можно использовать на страницах входа.

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

Итог

Использование хука wp_login_form_submit в WordPress — отличный способ добавить кастомную проверку при входе, будь то дополнительное поле, проверка IP или другие условия. С помощью простого кода можно значительно повысить безопасность и контроль над процессом авторизации.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙