get_password_reset_key() WP 4.4.0

Створює в БД ключ відновлення пароля для зазначеного користувача і повертає цей ключ.

Створений ключ зберігається в таблиці wp_users у полі user_activation_key . Перед збереженням ключ хешується за допомогою класу PasswordHash() і до нього додається мітка часу його створення:1523344279:$P$B1WitfrdGBKDfc8G3ESq.shs5ljDno.

Такий ключ використовує ядро ​​WordPress у стандартному посиланні на відновлення пароля, яке надсилається на пошту користувачу.

Приклад коду для створення такого посилання:

network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' )

// Отримаємо
// http://example.com/wp-login.php?action=rp&login=login&key=DNNipiJcP3IcasDtPqIQ

Ключ створюється за допомогою функції wp_generate_password() .

Чи перевіряти робочий ключ функцією check_password_reset_key() .

Хуки з функції
get_password_reset_key($user);
$user
(WP_User) (обов’язковий)
Об’єкт користувача котрій потрібно створити ключ.

Приклади

0

#1 Створимо ключ для відновлення пароля

$ user = get_userdata( 1 );

echo get_password_reset_key($user); // ZedUm9FEt48Kp4aGb5i8

нотатки

  • Global. PasswordHash. $wp_hasher Portable PHP password hashing framework.

список змін

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

Код get_password_reset_key() WP 6.0.2

function get_password_reset_key( $user ) {
	global $wp_hasher;

	if ( ! ( $user instanceof WP_User ) ) {
		return new WP_Error( 'invalidcombo', __( '<strong>Error</strong>: немає жодного об'єкта з тим, що username або email address.' ) );
	}

	/**
	 * Fires before a new password is retrieved.
	 *
	 * Use the {@see 'retrieve_password'} hook instead.
	 *
	 * @ Since 1.5.0
	 * @deprecated 1.5.1 Misspelled. Use {@see 'retrieve_password'} hook instead.
	 *
	 * @param string $user_login User login name.
	 */
	do_action_deprecated( 'retreive_password', array( $user->user_login ), '1.5.1', ​​'retrieve_password' );

	/**
	 * Fires before a new password is retrieved.
	 *
	 * @ Since 1.5.1
	 *
	 * @param string $user_login User login name.
	 */
	do_action( 'retrieve_password', $user->user_login);

	$allow = true;
	if ( is_multisite() && is_user_spammy( $user ) ) {
		$allow = false;
	}

	/**
	 * Filters whether to allow a password to be reset.
	 *
	 * @ Since 2.7.0
	 *
	 * @param bool $allow Whether to allow the password to be reset. Default true.
	 * @param int $user_id ID ідентифікатора користувача до оновлення password.
	 */
	$allow = apply_filters( 'allow_password_reset', $allow, $user->ID );

	if (! $allow) {
		return new WP_Error( 'no_password_reset', __( 'Password reset is not allowed for this user' ) );
	} elseif (is_wp_error($allow)) {
		return $allow;
	}

	// Generate деякий random для password reset key.
	$ key = wp_generate_password (20, false);

	/**
	 * Fires when a password reset key is generated.
	 *
	 * @ Since 2.5.0
	 *
	 * @param string $user_login Username for the user.
	 * @param string $key Створений password reset key.
	 */
	do_action( 'retrieve_password_key', $user->user_login, $key);

	// Now insert the key, hashed, into DB.
	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;
}

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

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