Получение ключа сброса пароля для пользователя

# Получение ключа сброса пароля для пользователя

Функция get_password_reset_key() позволяет создать, сохранить и вернуть ключ для сброса пароля пользователя.

## Хуки функции

- retreive_password
- retrieve_password
- retrieve_password_key

## Возврат значений

Возвращает строку с ключом сброса пароля в случае успеха или объект WP_Error в случае ошибки.

## Использование

```php
get_password_reset_key( $user );

Параметры:

  • $user (объект WP_User) — обязательный параметр. Указывает пользователя, для которого необходимо получить ключ сброса пароля.

Примеры

Пример 1: Создание ключа для сброса пароля

$user = get_userdata( 1 );
echo get_password_reset_key( $user ); // Например, "ZedUm9FEt48Kp4aGb5i8"

Примечания

  • Глобальная переменная: $wp_hasher — экземпляр библиотеки для безопасного хеширования паролей.

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

  • С версии 4.4.0: Функция была добавлена в WordPress.

Код функции

Функция определена в файле wp-includes/user.php. Вот как выглядит её реализация:


function get_password_reset_key( $user ) {
global $wp_hasher;

// Проверяем, является ли $user экземпляром WP_User
if ( ! ( $user instanceof WP_User ) ) {
    return new WP_Error( 'invalidcombo', __( 'Ошибка: Указанного пользователя или email не существует.' ) );
}

// Генерируем событие перед получением нового пароля
do_action( 'retrieve_password', $user->user_login );

// Проверяем, разрешен ли сброс пароля для данного пользователя
$password_reset_allowed = wp_is_password_reset_allowed_for_user( $user );
if ( ! $password_reset_allowed ) {
    return new WP_Error( 'no_password_reset', __( 'Сброс пароля для этого пользователя невозможен.' ) );
} elseif ( is_wp_error( $password_reset_allowed ) ) {
    return $password_reset_allowed; // Возвращаем ошибку, если такая есть
}

// Генерируем случайный ключ для сброса пароля
$key = wp_generate_password( 20, false );

// Зафиксируем событие, когда ключ сброса пароля сгенерирован
do_action( 'retrieve_password_key', $user->user_login, $key );

// Вставляем хешированный ключ в базу данных
if ( empty( $wp_hasher ) ) {
    require_once ABSPATH . WPINC . '/class-phpass.php';
    $wp_hasher = new PasswordHash( 8, true );
}

$hashed = time() . ':' . $wp_hasher->HashPassword( $key );

$key_saved = wp_update_user(
    array(
        'ID'                  => $user->ID,
        'user_activation_key' => $hashed,
    )
);

if ( is_wp_error( $key_saved ) ) {
    return $key_saved; // Возвращаем ошибку, если не удалось сохранить ключ
}

return $key; // Возвращаем сгенерированный ключ

}

Похожие функции

  • Проверка ключа сброса пароля: check_password_reset_key()
  • Проверка пароля: wp_check_password()
  • Генерация пароля: wp_generate_password()
  • Получение подсказки для пароля: wp_get_password_hint()
  • Хеширование пароля: wp_hash_password()
  • Установка пароля: wp_set_password()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *