Ця функція створена швидше для внутрішнього використання ядром 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 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;
}