В стандартной установке WordPress вход на сайт возможен как по логину, так и по email-адресу пользователя. Несмотря на удобство, это может создавать проблемы с безопасностью или административным контролем, особенно если нужно ограничить доступ только по логину. В этой статье мы подробно разберём, как убрать возможность авторизации по email, оставив только вход по логину. Рассмотрим примеры кода и полезные плагины, которые помогут решить эту задачу.
Почему стоит ограничить вход только по логину
Обычно WordPress позволяет авторизоваться используя либо логин, либо email. Однако иногда это может приводить к следующим проблемам:
- Уязвимость к перебору: если email известен, злоумышленник может пытаться подобрать пароль, используя email, что упрощает задачу.
- Административный контроль: в некоторых компаниях логины стандартизированы, а email может меняться — разрешать вход только по логину удобнее для администраторов.
- Совместимость с внешними системами: если интеграции требуют аутентификацию по логину, возможность входа по email мешает контролю.
Поэтому задача отключить авторизацию по email достаточно актуальна.
Как WordPress обрабатывает аутентификацию по email и логину
Чтобы понять, как отключить вход по email, нужно знать, что в WordPress функция wp_authenticate_username_password в файле wp-includes/class-wp-authenticate.php обрабатывает аутентификацию пользователя. Если в поле login введён email, то система сначала ищет пользователя с этим email и подставляет логин для дальнейшей проверки пароля.
Задача — перехватить вводимые данные при логине и проверить, что поле login не содержит email, либо не преобразовывать email в логин.
Решение: фильтр для отключения авторизации по email
Самый простой способ — добавить фильтр, который будет запрещать вход, если в поле логина введён email.
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
add_filter('authenticate', 'wpcore_disable_email_authentication', 20, 3);
function wpcore_disable_email_authentication($user, $username, $password) {
if (is_email($username)) {
return new WP_Error('email_auth_disabled', __('Авторизация по email отключена. Используйте логин.'));
}
return $user;
}Этот код использует стандартную функцию is_email() для проверки, является ли введённое значение email. Если да — возвращается ошибка, и вход отклоняется.
Как это работает
Фильтр authenticate вызывается во время попытки авторизации, позволяя перехватить и изменить процесс. При обнаружении email мы прерываем процесс и показываем ошибку.
Улучшение UX: выводим кастомное сообщение об ошибке
Чтобы сообщение об ошибке выглядело аккуратно на странице входа, можно использовать стандартный механизм WordPress. Наш код уже возвращает объект WP_Error с нужным сообщением, WordPress автоматически его покажет.
Если вы хотите изменить стиль или текст, можно дополнительно подключить фильтр login_errors.
Альтернативный подход: замена email на логин автоматически
Если вы хотите не запрещать вход по email, а автоматически преобразовывать email в логин, можно использовать следующий код:
add_filter('authenticate', 'wpcore_email_to_login_authentication', 20, 3);
function wpcore_email_to_login_authentication($user, $username, $password) {
if (is_email($username)) {
$user_data = get_user_by('email', $username);
if ($user_data) {
$username = $user_data->user_login;
} else {
return new WP_Error('invalid_email_login', __('Пользователь с таким email не найден.'));
}
}
return wp_authenticate_username_password(null, $username, $password);
}Однако это стандартное поведение WordPress, и если вам нужно именно удалить такую возможность, то лучше первый способ.
Плагины для контроля аутентификации в WordPress
Если вы не хотите писать код, можно воспользоваться плагинами, позволяющими управлять способами входа:
- Clearfy Pro — плагин для оптимизации и безопасности WordPress, в котором есть настройки для ограничения способов авторизации.
- WPCommunity — плагин для создания сообщества с расширенным контролем регистрации и входа.
Использование плагинов удобно для тех, кто не хочет править код, но с ними нужно внимательно настраивать параметры, чтобы не блокировать легитимных пользователей.
Как протестировать решение
После добавления кода или установки плагина обязательно проверьте:
- Попытку войти с логином — должна быть успешной.
- Попытку войти с email — должна быть отклонена с сообщением ошибки.
- Проверьте работу восстановления пароля — она должна работать как и прежде.
Рекомендуется проверить на нескольких браузерах и в режиме инкогнито, чтобы исключить влияние кэша.
Заключение
Ограничение входа в WordPress только по логину — простая, но эффективная мера безопасности и контроля доступа. С помощью небольшого кода можно быстро реализовать запрет авторизации по email, улучшая безопасность сайта без потери удобства для пользователей.
Если хотите расширенные функции безопасности и управления входом — обратите внимание на Clearfy Pro или WPCommunity.