WP_AUTHENTICATE(): Руководство по использованию и примеры кода

# Функция 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()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *