функция since 5.6.0

wp_populate_basic_auth_from_authorization_header()

Проверено на WordPress 6.9, обновлено Источник: WordPress Developer Resources.

Сигнатура

wp_populate_basic_auth_from_authorization_header()

Описание

Некоторые серверы, работающие в режиме CGI или FastCGI, не передают заголовок Authorization в WordPress. Если он был переписан в заголовок HTTP_AUTHORIZATION, вместо этого заполняются соответствующие переменные $_SERVER .

Оригинал (английский)

Some servers running in CGI or FastCGI mode don’t pass the Authorization header on to WordPress. If it’s been rewritten to the HTTP_AUTHORIZATION header, fill in the proper $_SERVER variables instead.

Исходный код

wp-includes/load.php:106

function wp_populate_basic_auth_from_authorization_header() {
	// If we don't have anything to pull from, return early.
	if ( ! isset( $_SERVER['HTTP_AUTHORIZATION'] ) && ! isset( $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ) ) {
		return;
	}

	// If either PHP_AUTH key is already set, do nothing.
	if ( isset( $_SERVER['PHP_AUTH_USER'] ) || isset( $_SERVER['PHP_AUTH_PW'] ) ) {
		return;
	}

	// From our prior conditional, one of these must be set.
	$header = $_SERVER['HTTP_AUTHORIZATION'] ?? $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];

	// Test to make sure the pattern matches expected.
	if ( ! preg_match( '%^Basic [a-z\d/+]*={0,2}%i', $header ) ) {
		return;
	}

	// Removing `Basic ` the token would start six characters in.
	$token    = substr( $header, 6 );
	$userpass = base64_decode( $token );

	// There must be at least one colon in the string.
	if ( ! str_contains( $userpass, ':' ) ) {
		return;
	}

	list( $user, $pass ) = explode( ':', $userpass, 2 );

	// Now shove them in the proper keys where we're expecting later on.
	$_SERVER['PHP_AUTH_USER'] = $user;
	$_SERVER['PHP_AUTH_PW']   = $pass;
}

История изменений

ВерсияОписание
5.6.0 Introduced.

Что будем искать? Например,Продвижение

Этот сайт использует куки-файлы. Оставаясь на сайте, Вы соглашаетесь на их использование. Для получения дополнительной информации, пожалуйста, ознакомьтесь с политикой в отношении персональных данных.