wp_authenticate_application_password() WP 5.6.0

Авторизує користувача використовуючи Basic авторизацію .

За замовчуванням функція повішена на хук authenticate і спрацьовує під час виклику функції wp_authenticate() :

add_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3);
add_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3);
add_filter( 'authenticate', 'wp_authenticate_application_password', 20, 3);
add_filter( 'authenticate', 'wp_authenticate_spam_check', 99);

Дивіться на тему: wp_validate_application_password ()

Повертає

WP_User|WP_Error|null. WP_Error при невдачі.

Використання

wp_authenticate_application_password( $input_user, $username, $password );
$input_user
(WP_User/WP_Error/null) (обов’язковий)

Вхідні дані користувача. Зазвичай null.

Якщо передати WP_Error немає сенсу, тому що змінна в цьому випадку ніде не використовується у фукнції.

$username
(рядок) (обов’язковий)
Логін або Email користувача для якого авторизується.
$password
(рядок) (обов’язковий)
Пароль, створені у профілі у розділі Паролі програм.

Приклади

0

#1 Демонстрація використання

Ця функція створена швидше для внутрішнього використання ядром WP, тому як приклад розглянемо код функції, в якій використовується ця функція:

function wp_validate_application_password( $input_user ) {
	// Don't authenticate twice.
	if ( ! empty( $input_user ) ) {
		return $input_user;
	}

	if ( ! wp_is_application_passwords_available() ) {
		return $input_user;
	}

	// Check that we're trying to authenticate
	if ( ! isset( $_SERVER['PHP_AUTH_USER'] ) ) {
		return $input_user;
	}

	$authenticated = wp_authenticate_application_password( null, $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'] );

	if ( $authenticated instanceof WP_User ) {
		return $authenticated->ID;
	}

	// If it wasn't a user what got returned, just pass on what we had received originally.
	return $input_user;
}

список змін

З версії 5.6.0Введено.

Код wp_authenticate_application_password() WP 6.0.2

function wp_authenticate_application_password( $input_user, $username, $password ) {
	if ( $input_user instanceof WP_User ) {
		return $input_user;
	}

	if ( ! WP_Application_Passwords::is_in_use() ) {
		return $input_user;
	}

	$is_api_request = ( ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) );

	/**
	 * Filters whether this is an API request that Application Passwords can be used on.
	 *
	 * Залежно від того, Application Passwords є доступним для REST API and XML-RPC.
	 *
	 * @ Since 5.6.0
	 *
	 * @param bool $is_api_request Якщо це прийнята API request.
	 */
	$is_api_request = apply_filters( 'application_password_is_api_request', $is_api_request );

	if ( ! $is_api_request ) {
		return $input_user;
	}

	$error = null;
	$user = get_user_by( 'login', $username );

	if ( ! $user && is_email( $username ) ) {
		$user = get_user_by( 'email', $username );
	}

	// If the login name is invalid, short circuit.
	if ( ! $user ) {
		if ( is_email( $username ) ) {
			$error = new WP_Error(
				'invalid_email',
				__( '<strong>Error</strong>: Unknown email address. Check again or try your username.' )
			);
		} else {
			$error = new WP_Error(
				'invalid_username',
				__( '<strong>Error</strong>: Unknown name.
			);
		}
	} elseif ( ! wp_is_application_passwords_available() ) {
		$error = new WP_Error(
			'application_passwords_disabled',
			__( 'Application passwords are not available.' )
		);
	} elseif (! wp_is_application_passwords_available_for_user($user)) {
		$error = new WP_Error(
			'application_passwords_disabled_for_user',
			__( 'Application passwords недоступні для вашого облікового запису. Відвідайте веб-сайт адміністратора для допомоги.' )
		);
	}

	if ($ error) {
		/**
		 * Fires коли application password failed to authenticate the user.
		 *
		 * @ Since 5.6.0
		 *
		 * @param WP_Error $error The authentication error.
		 */
		do_action( 'application_password_failed_authentication', $error);

		return $error;
	}

	/*
	 * Strips out anything non-alphanumeric. This is so passwords can be used with
	 * або без областей для визначення групування для readability.
	 *
	 * Generated application passwords є exclusively alphanumeric.
	 */
	$password = preg_replace( '/[^azd]/i', '', $password );

	$hashed_passwords = WP_Application_Passwords::get_user_application_passwords( $user->ID );

	foreach ( $hashed_passwords as $key => $item ) {
		if ( ! wp_check_password( $password, $item['password'], $user->ID ) ) {
			continue;
		}

		$error = новий WP_Error();

		/**
		 * Fires коли application password has been successfully checked as valid.
		 *
		 * Це дозволяє для plugins до додаткової додаткової конституції до того, щоб application password from being used.
		 *
		 * @ Since 5.6.0
		 *
		 * @param WP_Error $error The error object.
		 * @param WP_User $user The user authenticating.
		 * @param array $item Подробиці про застосування password.
		 * @param string $password Raw supplied password.
		 */
		do_action( 'wp_authenticate_application_password_errors', $error, $user, $item, $password );

		if ( is_wp_error( $error ) && $error->has_errors() ) {
			/** Ця дія міститься в wp-includes/user.php */
			do_action( 'application_password_failed_authentication', $error);

			return $error;
		}

		WP_Application_Passwords::record_application_password_usage( $user->ID, $item['uuid'] );

		/**
		 * Fires after an application password був використаний для authentication.
		 *
		 * @ Since 5.6.0
		 *
		 * @param WP_User $user The user who was authenticated.
		 * @param array $item The application password used.
		 */
		do_action( 'application_password_did_authenticate', $user, $item);

		return $user;
	}

	$error = new WP_Error(
		'incorrect_password',
		__( 'The provided password is an invalid application password.' )
	);

	/** Ця дія міститься в wp-includes/user.php */
	do_action( 'application_password_failed_authentication', $error);

	return $error;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *