Функция 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 и помогает поддерживать безопасность входа пользователей.