Функция check_password_reset_key()
проверяет корректность и актуальность ключа для восстановления пароля, который был ранее создан с помощью функции get_password_reset_key()
. Этот ключ обычно отправляется пользователю по электронной почте в ссылке для сброса пароля.
check_password_reset_key( string $key, string $login ): WP_User|WP_Error
Описание
Когда пользователь запрашивает восстановление пароля, WordPress генерирует уникальный ключ и сохраняет его хэш в базе данных. Функция check_password_reset_key()
принимает этот ключ, сравнивает его с хэшем, который хранится в поле user_activation_key
таблицы wp_users
, и возвращает объект пользователя, если ключ корректен.
Ключ действителен в течение 24 часов с момента его создания.
Параметры
$key
(строка, обязательный): Ключ для сравнения с хранимым в базе данных хэшем. Обычно этот ключ содержится в ссылке для восстановления пароля.$login
(строка, обязательный): Логин пользователя, для которого проверяется ключ.
Возвращаемое значение
WP_User
: Объект пользователя, если ключ корректен и не просрочен.WP_Error
: Объект ошибки, если ключ недействителен, просрочен, или не совпадает с сохраненным хэшем.
Пример 1: Создание и проверка ключа для восстановления пароля
В этом примере мы создаем ключ для восстановления пароля пользователя с ID 3 и проверяем его корректность:
// Получаем данные пользователя с ID 3
$user = get_userdata( 3 );
// Создаем ключ для восстановления пароля
$key = get_password_reset_key( $user ); // Например: G5hrR9LZe72Qp4kGy3i9
// Проверяем ключ
$is_valid = check_password_reset_key( $key, 'admin_user' ); // Логин пользователя: admin_user
if ( is_wp_error( $is_valid ) ) {
echo 'Ошибка: ' . $is_valid->get_error_message();
} else {
echo 'Ключ прошел проверку. Можно продолжить восстановление пароля.';
}
В этом примере используется другой логин (admin_user
), и создается уникальный ключ для восстановления пароля.
Пример 2: Обработка ошибки, если ключ просрочен
В этом примере демонстрируется обработка ошибки, возникающей, если ключ для восстановления пароля истек:
// Получаем данные пользователя с логином 'mike_doe'
$user = get_user_by( 'login', 'mike_doe' );
// Создаем ключ для восстановления пароля
$key = get_password_reset_key( $user );
// Проверяем ключ (предположим, что прошло больше суток с момента создания ключа)
$is_valid = check_password_reset_key( $key, 'mike_doe' );
if ( is_wp_error( $is_valid ) ) {
if ( 'expired_key' === $is_valid->get_error_code() ) {
echo 'Ключ для восстановления пароля истек.';
} else {
echo 'Ошибка: ' . $is_valid->get_error_message();
}
} else {
echo 'Ключ действителен, можно сбросить пароль.';
}
Здесь используется логин mike_doe
, и код обрабатывает ситуацию, когда ключ истекает.
Пример 3: Генерация и отправка ссылки для восстановления пароля
Этот пример демонстрирует создание и проверку ключа для восстановления пароля, а также отправку ссылки пользователю по email:
// Получаем данные пользователя
$user = get_user_by( 'email', '[email protected]' );
// Создаем ключ для восстановления пароля
$key = get_password_reset_key( $user );
if ( ! is_wp_error( $key ) ) {
// Генерируем ссылку для сброса пароля
$reset_link = network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' );
// Отправляем email с инструкциями
wp_mail( $user->user_email, 'Восстановление пароля', "Для сброса пароля перейдите по ссылке: $reset_link" );
echo 'Ссылка для восстановления пароля отправлена на email.';
} else {
echo 'Ошибка при создании ключа: ' . $key->get_error_message();
}
В этом примере отправляется ссылка на восстановление пароля пользователю с email [email protected]
.
Пример 4: Проверка ключа после перехода по ссылке
Когда пользователь переходит по ссылке, содержащей ключ для восстановления пароля, вы можете использовать check_password_reset_key()
для проверки его корректности:
// Получаем ключ и логин из URL
$key = $_GET['key'];
$login = $_GET['login'];
// Проверяем корректность ключа
$is_valid = check_password_reset_key( $key, $login );
if ( is_wp_error( $is_valid ) ) {
echo 'Ошибка: ' . $is_valid->get_error_message();
} else {
echo 'Ключ действителен. Пользователь может сбросить пароль.';
}
Этот пример показывает, как проверить ключ, полученный через URL после того, как пользователь перешел по ссылке для сброса пароля.
Заключение
Функция check_password_reset_key()
является важной частью системы восстановления пароля в WordPress. Она проверяет валидность ключа для сброса пароля и позволяет продолжить процесс только при условии, что ключ корректен и не истек.