WordPress как на ладони
WordCamp Saint Petersburg 2018 wordpress jino

get_password_reset_key() WP 4.4.0

Создает в БД ключ для восстановления пароля для указанного юзера и возвращает этот ключ.

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

Ключ в WordPress отправляется на почту в виде ссылки:
https://site.ru/wp-login.php?action=rp&login=login&key=DNNipiJcP3IcasDtPqIQ.
Код для создания такой ссылки:

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

Ключ создается с помощью функции wp_generate_password().

Проверять рабочий ли ключ нужно функцией check_password_reset_key().

Хуки из функции:
Возвращает

Строку/WP_Error.

  • Ключ для сброса пароля.
  • WP_Error, когда пользователю запрещено создавать ключ или когда не удалось записать ключ в БД.

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

get_password_reset_key( $user );
$user(WP_User) (обязательный)
Объект юзера для которого нужно создать ключ.

Примеры

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

$user = get_userdata( 1 );

echo get_password_reset_key( $user ); // ZedUm9FEt48Kp4aGb5i8

Код get password reset key: wp-includes/user.php VER 4.9.5

<?php
function get_password_reset_key( $user ) {
	global $wpdb, $wp_hasher;

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

	/**
	 * Fires before a new password is retrieved.
	 *
	 * @since 1.5.1
	 *
	 * @param string $user_login The 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_data->ID The ID of the user attempting to reset a 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 something random for a 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 The username for the user.
	 * @param string $key        The generated password reset key.
	 */
	do_action( 'retrieve_password_key', $user->user_login, $key );

	// Now insert the key, hashed, into the 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 = $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );
	if ( false === $key_saved ) {
		return new WP_Error( 'no_password_key_update', __( 'Could not save password reset key to database.' ) );
	}

	return $key;
}

Cвязанные функции

Из метки: password (пароли)

Еще из раздела: Вход/выход

get_password_reset_key Комментариев нет

    Здравствуйте, !

    Ваш комментарий
    Предпросмотр