Функция wp_check_password()
проверяет введённый пользователем пароль (в виде обычного текста) на соответствие с уже сохранённым в базе данных зашифрованным паролем. Это полезно для аутентификации пользователя, когда требуется проверить корректность пароля при входе в систему.
Функция поддерживает обратную совместимость со старыми методами шифрования паролей и использует библиотеку PHPass для более современных подходов шифрования.
wp_check_password( string $password, string $hash, string|int $user_id = '' ): bool
Параметры
$password
(строка, обязательный): Обычный текстовый пароль, который нужно проверить.$hash
(строка, обязательный): Зашифрованный (хэшированный) пароль, который хранится в базе данных и с которым нужно сравнить введённый пароль.$user_id
(строка | число, необязательный): ID пользователя. Используется для пересохранения пароля в соответствии с новыми методами шифрования, если введённый пароль проходит проверку. По умолчанию:''
.
Возвращаемое значение
true
— если введённый пароль совпадает с зашифрованным паролем (хэшом) в базе данных.false
— если пароли не совпадают.
Использование
Функция проверяет соответствие между обычным текстовым паролем, который вводит пользователь, и зашифрованным паролем, который хранится в базе данных. Это достигается путём хэширования текстового пароля и сравнения его с сохранённым хэшем.
Пример 1: Проверка пароля пользователя при аутентификации
Допустим, мы получаем пароль от пользователя и хотим проверить, правильный ли он. Для этого мы можем использовать следующий код:
$user = get_user_by( 'login', $username );
if ( $user && wp_check_password( $pass, $user->data->user_pass, $user->ID ) ) {
echo "Пароль верный!";
} else {
echo "Неверный пароль!";
}
Этот код сначала получает объект пользователя по его имени. Затем с помощью функции wp_check_password()
проверяется, совпадает ли введённый пароль с хэшем в базе данных.
Пример 2: Проверка пароля по ID пользователя
Допустим, у нас есть идентификатор пользователя, и мы хотим проверить, соответствует ли введённый пароль его учётным данным:
$user = get_userdata( 7 );
if ( $user ) {
$password = 'qwerty12345';
$hash = $user->data->user_pass;
if ( wp_check_password( $password, $hash ) ) {
echo "Это правильный пароль!";
} else {
echo "Пароль неверен.";
}
}
Здесь мы проверяем, соответствует ли введённый текстовый пароль «qwerty12345» пользователю с ID 7.
Пример 3: Обновление хэша пароля
Если используется старый алгоритм хэширования паролей, можно пересохранить хэш при успешной проверке:
$user = get_userdata( $user_id );
if ( $user && wp_check_password( $password, $user->data->user_pass, $user_id ) ) {
wp_set_password( $password, $user_id );
echo "Хэш пароля обновлён!";
}
Хуки, связанные с wp_check_password()
check_password
: Этот хук вызывается перед проверкой пароля, что позволяет разработчикам вмешаться в процесс проверки.
Особенности
- Обратная совместимость: Функция поддерживает проверку паролей, зашифрованных как старыми методами, так и с использованием современных алгоритмов (PHPass).
- Pluggable-функция: Как и многие функции WordPress,
wp_check_password()
является заменяемой, то есть её можно переопределить через плагин.
Заключение
Функция wp_check_password()
— это важный инструмент для проверки корректности пароля пользователя в WordPress. Она поддерживает современные методы шифрования и может быть использована для аутентификации, защиты контента и других задач, связанных с безопасностью.