Функция wp_authenticate()
в WordPress используется для аутентификации пользователя, проверяя, соответствуют ли введённые логин (или email) и пароль учетной записи. Функция возвращает объект пользователя (WP_User
), если проверка прошла успешно, или объект ошибки (WP_Error
), если данные некорректны.
Важно отметить, что wp_authenticate()
не авторизует пользователя, а только проверяет правильность введённых данных. Для фактической авторизации пользователя необходимо использовать другие функции, такие как wp_set_auth_cookie()
.
wp_authenticate( string $username, string $password ): WP_User|WP_Error
Параметры
- $username (string, обязательный) — Логин пользователя или его email.
- $password (string, обязательный) — Пароль пользователя.
Возвращаемое значение
WP_User
— Объект пользователя, если данные аутентификации верны.WP_Error
— Объект ошибки, если данные неверны.
Дополнительная информация
- Функция
wp_authenticate()
является pluggable, что означает, что её можно переопределить в плагине. - Не стоит путать её с хуком
wp_authenticate
.
Примечание
Функция работает только после подключения всех плагинов. Для её корректного использования в плагине вызовы следует делать через хуки plugins_loaded
или более поздние события, например, init
.
Взаимодействие с другими функциями
- Основана на:
wp_authenticate_username_password()
,wp_authenticate_email_password()
. - Используется в:
wp_signon()
,user_pass_ok()
.
Хуки в функции
authenticate
— позволяет вмешаться в процесс аутентификации.wp_login_failed
— вызывается при неудачной попытке входа.
Пример 1: Проверка данных пользователя
Пусть у нас есть логин и пароль пользователя, и мы хотим проверить, существует ли такой пользователь и верны ли данные.
$username = 'userName';
$password = 'userPass';
// Пытаемся аутентифицировать пользователя
$auth = wp_authenticate($username, $password);
// Проверяем результат
if (is_wp_error($auth)) {
// Если произошла ошибка, выводим её
$error_string = $auth->get_error_message();
echo '<div class="error"><p>' . $error_string . '</p></div>';
} else {
// Пользователь существует, авторизуем его
wp_set_auth_cookie($auth->ID);
}
Пример 2: Отключение авторизации по логину
Начиная с WordPress 4.5, в поле логина можно вводить email. Если необходимо отключить авторизацию по логину, но оставить возможность входа по email, используйте следующий код:
remove_filter('authenticate', 'wp_authenticate_username_password', 20, 3);
Пример 3: Отключение авторизации по email
Чтобы вернуть старое поведение (авторизация только по логину), можно отключить фильтр, отвечающий за проверку email:
remove_filter('authenticate', 'wp_authenticate_email_password', 20, 3);
Заключение
Функция wp_authenticate()
полезна для проверки данных пользователей, но её не следует путать с фактическим процессом авторизации. Для полноценного входа в систему необходимо использовать дополнительные функции, такие как wp_set_auth_cookie()
или wp_signon()
.