check_password_reset_key() │ WP 3.1.0 Перевіряє (порівнює) переданий ключ відновлення пароля з хешом цього ключа в БД.
Хеш ключа створюється функцією get_password_reset_key() під час запиту відновлення пароля і зберігається в БД, таблиці, wp_users в полі user_activation_key .
Збережений у БД ключ придатний один день (добу) з моменту його створення.
Повертає WP_User|WP_Error
.
Об’єкт WP_User, якщо вказаний ключ пройшов перевірку (рівний хешу). Об’єкт WP_Error якщо ключ не дорівнює хеш або прострочений. Використання check_password_reset_key($key, $login);
$key
(рядок) (обов’язковий)
Ключ для порівняння з хеш. Цей ключ зазвичай надсилається на пошту як посилання.
$login
(рядок) (обов’язковий)
Логін користувача, хеш ключа якого потрібно отримати з БД та порівняти зі значенням
$key . Приклади #1 Приклад створення та перевірки ключа для відновлення пароля // Створимо ключ для користувача 1 з логіном siesta
$ user = get_userdata( 1 );
$key = get_password_reset_key($user); // ZedUm9FEt48Kp4aGb5i8
// Перевіримо створений ключ
$ is_ok = check_password_reset_key ($ key, 'siesta');
if( is_wp_error($is_ok) ){
echo $is_ok->get_error_message();
}
else {
echo 'Ключ пройшов перевірку. Можна надсилати новий пароль на пошту.';
} Додати свій приклад
нотатки Global. wpdb. $wpdb WordPress Database object for queries. Global. PasswordHash. $wp_hasher Portable PHP password hashing framework instance. список змін Код check_password_reset_key() check password reset key WP 6.0.2 function check_password_reset_key( $key, $login ) {
Global $wpdb, $wp_hasher;
$key = preg_replace( '/[^a-z0-9]/i', '', $key );
if ( empty( $key ) || ! is_string( $key ) ) {
return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
}
if ( empty( $login ) || ! is_string( $login ) ) {
return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
}
$user = get_user_by( 'login', $login );
if ( ! $user ) {
return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
}
if ( empty( $wp_hasher ) ) {
require_once ABSPATH. WPINC. '/class-phpass.php';
$wp_hasher = New PasswordHash(8, true);
}
/**
* Filters the expiration time of password reset keys.
*
* @ Since 4.3.0
*
* @param int $expiration Опис часу в секундах.
*/
$expiration_duration = apply_filters( 'password_reset_expiration', DAY_IN_SECONDS );
if ( false !== strpos( $user->user_activation_key, ':' ) ) {
list( $pass_request_time, $pass_key ) = explode(':', $user->user_activation_key, 2);
$expiration_time = $pass_request_time + $expiration_duration;
} else {
$pass_key = $user->user_activation_key;
$ expiration_time = false;
}
if (! $pass_key) {
return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
}
$hash_is_correct = $wp_hasher->CheckPassword( $key, $pass_key );
if ( $hash_is_correct && $expiration_time && time() < $expiration_time ) {
return $user;
} elseif ( $hash_is_correct && $expiration_time ) {
// Key has an expiration time that's passed.
return new WP_Error( 'expired_key', __( 'Invalid key.' ) );
}
if ( hash_equals( $user->user_activation_key, $key ) || ( $ hash_is_correct && ! $expiration_time ) ) {
$return = new WP_Error( 'expired_key', __( 'Invalid key.' ) );
$user_id = $user->ID;
/**
* Filters the return value of check_password_reset_key() when an
* old-style key is used.
*
* @since 3.7.0 Спочатку plain-text keys були stored in the database.
* @since 4.3.0 Спочатку key hashes були stored without an expiration time.
*
* @param WP_Error $return A WP_Error object denoting an expired key.
* Return a WP_User object to validate the key.
* @param int $user_id Matched user ID.
*/
return apply_filters( 'password_reset_key_expired', $return, $user_id );
}
return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
} Зв’язані функції