Как создать собственную авторизацию в WordPress: практические примеры и код

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

Почему стоит создавать собственную авторизацию в WordPress

Стандартная авторизация WordPress базируется на cookie и nonce, что подходит для большинства проектов. Но бывают случаи, когда нужно:

  • Интегрировать авторизацию с внешними сервисами, например, через API;
  • Использовать нестандартные поля для входа (например, телефон или ID пользователя вместо email);
  • Добавить дополнительный уровень безопасности, например, двухфакторную аутентификацию с кастомными правилами;
  • Изменить логику обработки сессий и токенов для мобильных приложений или SPA.

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

Основные хуки для кастомной авторизации в WordPress

Чтобы создать собственную систему авторизации, нам нужно понимать, где именно в WordPress происходит вход пользователя:

  • wp_authenticate — фильтр, который позволяет перехватить процесс аутентификации;
  • authenticate — фильтр, применяемый к данным для входа;
  • wp_login — действие, вызываемое после успешного входа;
  • wp_logout — действие, вызываемое при выходе.

Например, чтобы заменить стандартную авторизацию, можно использовать фильтр authenticate и свою функцию:

add_filter('authenticate', 'wpauth_authenticate_custom', 20, 3);
function wpauth_authenticate_custom($user, $username, $password) {
    // Если пользователь уже аутентифицирован, возвращаем его
    if (is_a($user, 'WP_User')) {
        return $user;
    }

    // Кастомная логика проверки логина и пароля
    if (empty($username) || empty($password)) {
        return new WP_Error('empty_credentials', __('Пожалуйста, введите логин и пароль.'));
    }

    // Пример: поиск пользователя по кастомному метаполю (например, телефон)
    $user_query = new WP_User_Query(array(
        'meta_key' => 'phone_number',
        'meta_value' => $username,
        'number' => 1
    ));
    $users = $user_query->get_results();
    if (empty($users)) {
        return new WP_Error('invalid_phone', __('Пользователь с таким телефоном не найден.'));
    }

    $user = $users[0];

    // Проверяем пароль
    if (!wp_check_password($password, $user->user_pass, $user->ID)) {
        return new WP_Error('incorrect_password', __('Неверный пароль.'));
    }

    return $user;
}

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

Создание простого плагина с кастомной авторизацией

Чтобы систематизировать код и не править core, удобно оформить логику в виде плагина. Вот пример минимального плагина, который добавляет авторизацию по телефону:

<?php
/**
 * Plugin Name: WPAUTH Кастомная Авторизация по Телефону
 * Description: Позволяет входить в WordPress по номеру телефона вместо логина.
 * Version: 1.0
 * Author: WPAUTH
 */

add_filter('authenticate', 'wpauth_authenticate_custom', 20, 3);
function wpauth_authenticate_custom($user, $username, $password) {
    if (is_a($user, 'WP_User')) {
        return $user;
    }

    if (empty($username) || empty($password)) {
        return new WP_Error('empty_credentials', __('Пожалуйста, введите номер телефона и пароль.'));
    }

    $user_query = new WP_User_Query(array(
        'meta_key' => 'phone_number',
        'meta_value' => $username,
        'number' => 1
    ));
    $users = $user_query->get_results();
    if (empty($users)) {
        return new WP_Error('invalid_phone', __('Пользователь с таким номером телефона не найден.'));
    }

    $user = $users[0];

    if (!wp_check_password($password, $user->user_pass, $user->ID)) {
        return new WP_Error('incorrect_password', __('Неверный пароль.'));
    }

    return $user;
}

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

Дополнительные советы по безопасности кастомной авторизации

Создание собственной авторизации требует особого внимания к безопасности. Вот основные рекомендации:

  • Храните пароли только через стандартные функции WordPress (wp_hash_password и wp_check_password), не пытайтесь писать свои алгоритмы.
  • Добавьте ограничение по количеству неудачных попыток, чтобы избежать brute force.
  • Используйте защищённые соединения (SSL/TLS) для передачи данных авторизации.
  • Обрабатывайте ошибки аккуратно, не раскрывайте лишней информации злоумышленникам.
  • Рассмотрите возможность добавления двухфакторной аутентификации поверх кастомного входа.

Плагины для кастомизации авторизации в WordPress

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

  • WP Custom Login — позволяет изменить форму входа, добавить свои поля и логику;
  • Theme My Login — заменяет стандартную страницу входа и регистрации, поддерживает кастомные поля;
  • Profile Builder — мощный инструмент для создания собственных форм регистрации и авторизации с кастомными полями;
  • Two Factor Authentication — для добавления второго фактора безопасности поверх вашего решения.

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

Выводы и рекомендации по созданию своей авторизации

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

  • Определитесь с требованиями: какие данные использовать для входа, нужна ли двухфакторная авторизация, интеграция с внешними сервисами.
  • Используйте фильтр authenticate для перехвата процесса входа.
  • Пишите чистый и проверенный код, не переопределяйте без необходимости стандартные функции.
  • Тестируйте на разных сценариях и не забывайте про безопасность.

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

WordPress REST API: создание кастомной аутентификации по токену
25.01.2026
WordPress кастомные сообщения об ошибках при входе: настройка и примеры
01.12.2025
WordPress автоматическая смена пароля при первом входе
14.01.2026
WordPress авторизация по OTP без SMS: настройка и примеры кода
10.02.2026
WordPress авторизация через SMS и Email с использованием WPQRCode
19.02.2026