# Функция WP_AUTHENTICATE()
Функция wp_authenticate() проверяет данные для авторизации зарегистрированного пользователя (логин и пароль) и разрешает доступ, если проверка прошла успешно.
## Что делает эта функция?
Эта функция сама ничего не делает, но передает имя пользователя и пароль в фильтр authenticate. Через этот фильтр проверяется введенное имя пользоват��ля и пароль, и пользователь получает доступ.
### Заметка о замещаемой функции
Функция расположена в файле [/wp-includes/pluggable.php]. Эта функция можно переопределить в плагине. Это означает, что она будет работать только после загрузки всех плагинов. Если вы попытаетесь вызвать эту функцию напрямую в коде плагина, она не будет определена. Вместо этого вызовите её в хуках plugins_loaded или init.
## Замена функции
В вашем плагине (обязательном или обычном) вы можете создать функцию с тем же именем, и она заменит оригинальную функцию.
### Используемые функции
- wp_authenticate_username_password()
- wp_authenticate_email_password()
### Используется в
- wp_signon()
## Хуки функции
- authenticate
- wp_login_failed
## Возвращаемое значение
Функция возвращает объект WP_User, если учётные данные корректны, в противном случае возвращает WP_Error.
## Использование
Чтобы использовать функцию, нужно передать имя пользователя и пароль:
```php
wp_authenticate( $username, $password );
Параметры
$username(string) (обязательный) — имя пользователя или адрес электронной почты.$password(string) (обязательный) — пароль пользователя.
Примеры
Пример 1: Авторизация пользователя
Предположим, у нас есть имя пользователя и пароль, и мы хотим авторизовать пользователя с этими данными. Можно сделать так:
$username = 'truegamer';
$password = 'live_is_a_game';
// Авторизация
$auth = wp_authenticate( $username, $password );
// Проверка на ошибки
if ( is_wp_error( $auth ) ) {
$error_string = $auth->get_error_message();
echo '' . $error_string . '
';
} else {
echo 'Авторизация прошла успешно!';
}
Пример 2: Авторизация пользователя только по электронной почте
С помощью WordPress можно авторизовать пользователя, используя только его e-mail. Начиная с версии WP 4.5, WordPress автоматически проверяет как имя пользователя, так и адрес электронной почты. Для этого в коде используются два фильтра:
add_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
add_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3 );
Чтобы отключить авторизацию по логину и оставить только авторизацию по почте, нужно убрать фильтр для логина:
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
Пример 3: Авторизация пользователя только по логину
Чтобы оставить авторизацию только по логину, как это было до версии WP 4.5, нужно убрать фильтр для электронной почты:
remove_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3 );
Изменения в функции
- Начало использования: 2.5.0
- В версии 4.5.0 добавлена возможность использования адреса электронной почты вместо имени пользователя.
Код функции
function wp_authenticate( $username, $password ) {
$username = sanitize_user( $username );
$password = trim( $password );
$user = apply_filters( 'authenticate', null, $username, $password );
if ( null === $user || false === $user ) {
$user = new WP_Error( 'authentication_failed', __( 'Ошибка: Неверное имя пользователя, адрес электронной почты или пароль.' ) );
}
$ignore_codes = array( 'empty_username', 'empty_password' );
if ( is_wp_error( $user ) && ! in_array( $user->get_error_code(), $ignore_codes, true ) ) {
$error = $user;
do_action( 'wp_login_failed', $username, $error );
}
return $user;
}
Связанные функции
wp_set_auth_cookie()wp_signon()check_password_reset_key()get_password_reset_key()is_login()is_user_logged_in()wp_check_password()wp_destroy_other_sessions()wp_get_password_hint()wp_get_session_token()wp_login_form()wp_login_url()wp_loginout()wp_logout()wp_logout_url()wp_lostpassword_url()wp_register()wp_registration_url()wp_set_password()