Как использовать функцию WP_SET_AUTH_COOKIE() в WordPress

Функция WP_SET_AUTH_COOKIE()

Функция wp_set_auth_cookie() позволяет авторизовать пользователя по его ID. Эта функция устанавливает специальные куки для аутентификации, основываясь на переданном ID пользователя.

Важные моменты

  • Где использовать: Функцию необходимо вызывать до вывода любого контента на страницу, так как она работает с HTTP заголовками.
  • Отображение результата: Изменения будут видны не сразу, а после обновления страницы.
  • Параметр $remember: Если он установлен на true, куки будут храниться дольше. По умолчанию куки хранятся 2 дня. Если $remember равен true, то срок составит 14 дней.

Заметка о плагинах

Эта функция находится в файле pluggable.php, то есть она может быть переопределена с помощью плагина. Это означает, что функция доступна только после загрузки всех плагинов. Поэтому вы не можете вызывать её напрямую из кода плагина, а нужно использовать хук plugins_loaded или позже, например, хук init.

Параметры функции

wp_set_auth_cookie( $user_id, $remember, $secure, $token );
  • $user_id (int, обязательный): ID пользователя, которого нужно авторизовать.
  • $remember (bool): Указывает, нужно ли запоминать пользователя. По умолчанию false.
  • $secure (bool|string): Указывает, должны ли куки отправляться только по HTTPS. По умолчанию — пустая строка, что значит, используется значение от is_ssl().
  • $token (string): Токен сессии пользователя для этих куки. По умолчанию — пустая строка.

Примеры использования

Пример 1: Авторизация пользователя с ID 25

$ID = 25;
wp_set_auth_cookie($ID);

Пример 2: Правильная авторизация с очисткой данных

В этом случае сначала очищаем старые куки и заголовки кэша:

nocache_headers();
wp_clear_auth_cookie();
wp_set_auth_cookie($ID);

Обратные вызовы (Hooks)

В функции присутствуют несколько хуков, которые можно использовать для изменения поведения:

  • auth_cookie_expiration: Фильтр для изменения времени жизни куки.
  • secure_auth_cookie: Фильтр для установки флага безопасности для куки аутентификации.
  • secure_logged_in_cookie: Фильтр для установки флага безопасности для куки, указывающих на вход в систему.
  • set_auth_cookie: Срабатывает перед установкой куки аутентификации.
  • set_logged_in_cookie: Срабатывает перед установкой куки, показывающей, что пользователь вошел в систему.
  • send_auth_cookies: Позволяет предотвратить отправку куки аутентификации клиенту.

Возврат значения

Функция ничего не возвращает (null).

Изменения в версии

  • С версии 2.5.0 — была добавлена.
  • С версии 4.3.0 — добавлен параметр $token.

Исходный код функции

function wp_set_auth_cookie( $user_id, $remember = false, $secure = '', $token = '' ) {
    if ( $remember ) {
        $expiration = time() + apply_filters( 'auth_cookie_expiration', 14 * DAY_IN_SECONDS, $user_id, $remember );
        $expire = $expiration + ( 12 * HOUR_IN_SECONDS );
    } else {
        $expiration = time() + apply_filters( 'auth_cookie_expiration', 2 * DAY_IN_SECONDS, $user_id, $remember );
        $expire = 0;
    }

    if ( '' === $secure ) {
        $secure = is_ssl();
    }

    $secure_logged_in_cookie = $secure && 'https' === parse_url( get_option( 'home' ), PHP_URL_SCHEME );

    $secure = apply_filters( 'secure_auth_cookie', $secure, $user_id );
    $secure_logged_in_cookie = apply_filters( 'secure_logged_in_cookie', $secure_logged_in_cookie, $user_id, $secure );

    if ( $secure ) {
        $auth_cookie_name = SECURE_AUTH_COOKIE;
        $scheme = 'secure_auth';
    } else {
        $auth_cookie_name = AUTH_COOKIE;
        $scheme = 'auth';
    }

    if ( '' === $token ) {
        $manager = WP_Session_Tokens::get_instance( $user_id );
        $token = $manager->create( $expiration );
    }

    $auth_cookie = wp_generate_auth_cookie( $user_id, $expiration, $scheme, $token );
    $logged_in_cookie = wp_generate_auth_cookie( $user_id, $expiration, 'logged_in', $token );

    do_action( 'set_auth_cookie', $auth_cookie, $expire, $expiration, $user_id, $scheme, $token );
    do_action( 'set_logged_in_cookie', $logged_in_cookie, $expire, $expiration, $user_id, 'logged_in', $token );

    if ( ! apply_filters( 'send_auth_cookies', true, $expire, $expiration, $user_id, $scheme, $token ) ) {
        return;
    }

    setcookie( $auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure, true );
    setcookie( $auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure, true );
    setcookie( LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true );
    if ( COOKIEPATH !== SITECOOKIEPATH ) {
        setcookie( LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true );
    }
}

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

Leave a Reply

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