wp_check_password()WP 2.5.0

Сравнивает строки паролей: читабельный пароль (обычный) с кодированным паролем (в виде хэша). Нужна для проверки пароля пользователя.

Параметр $hash закодированный пароль (хранится в БД), а параметр $password - обычный текстовый пароль. Функция кодирует переданный текстовый пароль и сравнивает получившийся хэш с указанным, если они совпадают (кодированы по одному принципу) функция вернет true.

Поддерживает обратную совместимость со старой версией протокола аутентификации, который еще не использует библиотеку PHPass.

Pluggable функция — эту функцию можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.

Замена функции (переопределение) — в must-use или обычном плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.

Работает на основе: PasswordHash::CheckPassword()
1 раз — 0.002451 сек (очень медленно) | 50000 раз — 124.36 сек (тормоз) | PHP 7.1.2, WP 4.7.5
Хуки из функции

Возвращает

true|false. true/false: false, если пароль не совпадает с хэшем.

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

wp_check_password( $password, $hash, $user_id );
$password(строка) (обязательный)
Пароль в виде обычного текста.
$hash(строка) (обязательный)
Закодированный пароль с которым нужно сравнить первый параметр.
$user_id(число)
ID пользователя, которому нужно пересохранить хэш пароля в соответствии с новым (последним) алгоритмом хэширования. Пересохранение произойдет только если указанный пароль пройдет проверку.
По умолчанию: ''

Примеры

0

#1 Проверим пароль пользователя

Допустим у нас есть пароль в виде обычного текста и нам нужно узнать является ли этот пароль паролем пользователя с ID 3:

$user = get_userdata( 3 );
if( $user ){
	$password = 'moy-super-parol';
	$hash     = $user->data->user_pass;
	if ( wp_check_password( $password, $hash ) )
	   echo "Это пароль пользователя";
	else
	   echo "Это не его пароль";
}

Заметки

  • Global. PasswordHash. $wp_hasher PHPass object used for checking the password against the $hash + $password.

Список изменений

С версии 2.5.0 Введена.

Код wp_check_password() WP 6.5.2

function wp_check_password( $password, $hash, $user_id = '' ) {
	global $wp_hasher;

	// If the hash is still md5...
	if ( strlen( $hash ) <= 32 ) {
		$check = hash_equals( $hash, md5( $password ) );
		if ( $check && $user_id ) {
			// Rehash using new hash.
			wp_set_password( $password, $user_id );
			$hash = wp_hash_password( $password );
		}

		/**
		 * Filters whether the plaintext password matches the encrypted password.
		 *
		 * @since 2.5.0
		 *
		 * @param bool       $check    Whether the passwords match.
		 * @param string     $password The plaintext password.
		 * @param string     $hash     The hashed password.
		 * @param string|int $user_id  User ID. Can be empty.
		 */
		return apply_filters( 'check_password', $check, $password, $hash, $user_id );
	}

	/*
	 * If the stored hash is longer than an MD5,
	 * presume the new style phpass portable hash.
	 */
	if ( empty( $wp_hasher ) ) {
		require_once ABSPATH . WPINC . '/class-phpass.php';
		// By default, use the portable hash from phpass.
		$wp_hasher = new PasswordHash( 8, true );
	}

	$check = $wp_hasher->CheckPassword( $password, $hash );

	/** This filter is documented in wp-includes/pluggable.php */
	return apply_filters( 'check_password', $check, $password, $hash, $user_id );
}