wpforms.ru wordpress WPForms.ru

Как реализовать авторизацию пользователя через форму в WordPress

Проблема: необходимость авторизации пользователей через кастомную форму WPForms

В стандартном WordPress авторизация происходит через wp-login.php, что не всегда удобно. Часто нужно встроить форму входа в дизайн сайта с помощью WPForms, особенно если сайт стилизован под бренд или требует логин прямо на странице. В этой статье рассмотрим, как сделать полноценную форму авторизации через WPForms, включая проверку данных и перенаправление после успешного входа.

Диагностика задачи: почему стандартных возможностей WPForms для авторизации нет

WPForms — это конструктор форм с большой функциональностью, но из коробки он не поддерживает авторизацию пользователей. Для входа по логину и паролю нужна дополнительная логика проверки через WordPress API. Поэтому чтобы реализовать авторизацию, придётся использовать хук wpforms_process_before или wpforms_process, который даёт доступ к данным формы до или после отправки, и выполнить проверку пользователя программно.

Что нужно проверить перед реализацией:

  • Установлен ли WPForms Pro (требуется для доступа к хукам и кастомным обработчикам);
  • Есть ли в форме поля для логина и пароля с правильными ID;
  • Актуальна ли тема оформления и нет ли конфликтов с плагинами безопасности;
  • Нужно ли перенаправлять пользователя после входа и куда именно;
  • Используется ли HTTPS для защиты данных формы.

Пошаговое решение: создание формы входа и обработка данных

1. Создание формы WPForms с полями логина и пароля

Создайте новую форму с полями:

  • Username — тип «Текстовое поле»;
  • Password — тип «Пароль»;
  • Кнопка отправки.

Запомните ID этих полей. Допустим, ID логина — 1, пароля — 2.

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

В файл functions.php вашей темы или в отдельный плагин добавьте следующий код:

add_action('wpforms_process', 'wpforms_custom_login_process', 10, 4);
function wpforms_custom_login_process($fields, $entry, $form_data, $entry_id) {
    // Укажите ID вашей формы
    $target_form_id = 123;
    if ($form_data['id'] != $target_form_id) {
        return;
    }

    // Получаем введённые данные по ID полей
    $username = sanitize_text_field($fields[1]['value']);
    $password = $fields[2]['value']; // пароль не фильтруем для валидации

    // Проверяем пользователя через WP
    $user = wp_authenticate($username, $password);

    if (is_wp_error($user)) {
        // Добавляем ошибку в форму
        wpforms()->process->errors[$form_data['id']][1] = 'Неверный логин или пароль';
        return;
    }

    // Входим в систему
    wp_set_current_user($user->ID);
    wp_set_auth_cookie($user->ID);

    // Перенаправление после успешного входа
    wp_redirect(home_url('/dashboard'));
    exit;
}

Объяснение кода:

  • Проверяем ID формы — чтобы код работал только для нашей формы.
  • Получаем логин и пароль из полей.
  • Проверяем их через wp_authenticate.
  • Если ошибка — выводим сообщение рядом с полем логина.
  • Если всё хорошо — вызываем wp_set_auth_cookie и перенаправляем пользователя.

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

  • Откройте страницу с формой авторизации и введите правильные данные пользователя WordPress.
  • После отправки вы должны попасть на страницу /dashboard (или другую указанную в wp_redirect).
  • Проверьте, что в админке или в коде is_user_logged_in() возвращает true.
  • При вводе неверных данных должна появляться ошибка под полем логина.

Частые ошибки и как их исправить

  • Форма не отправляется или страница грузится заново без действий. Проверьте ID формы в коде и совпадение с вашей формой.
  • Ошибка «Неверный логин или пароль» даже при правильных данных. Убедитесь, что пароль передаётся без изменений и не фильтруется функциями, меняющими символы.
  • Перенаправление не происходит. Проверьте, что нет вывода до wp_redirect (никаких echo, var_dump, пробелов перед PHP-тегом).
  • Пользователь не авторизуется после отправки. Убедитесь, что вызов wp_set_auth_cookie и wp_set_current_user происходит до редиректа.
  • Конфликты с плагинами кэширования. Исключите страницу с формой из кэширования.

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

  • Используйте HTTPS на всех страницах с формами для защиты паролей.
  • Ограничьте количество попыток входа с помощью плагинов вроде Limit Login Attempts Reloaded, чтобы избежать перебора паролей.
  • Не сохраняйте пароли в базе WPForms или в логах.
  • Если форма используется много где, рассмотрите создание отдельного плагина с обработчиком, чтобы избежать потерь при смене темы.
  • Проверяйте совместимость с плагинами безопасности, которые могут блокировать wp_authenticate.

Сравнение вариантов реализации авторизации через WPForms

МетодУровень сложностиГибкостьБезопасностьПлюсыМинусы
Стандартный wp-login.phpНизкийНизкаяВысокая (из коробки)Простота, надёжность, поддержка WPНе вписывается в дизайн
WPForms + кастомный код (описанный способ)СреднийВысокаяЗависит от реализации, требует HTTPSПолный контроль над формой, интеграция в любой дизайнТребует разработки и тестирования
Плагины авторизации (Theme My Login и др.)НизкийСредняяСредняяГотовые решения, быстрое внедрениеМогут конфликтовать с WPForms и дизайном
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙