Проверьте пароль пользователя
Я хочу проверить, есть ли у пользователя определенный пароль, поэтому я пробовал его с помощью wp_check_password
, но учетная запись, для которой он проверен, выходит из системы и не может войти снова, пока в коде не появится вызов wp_check_password
.
Покопавшись в коде, я обнаружил, что он устанавливает пароль с помощью нового хэша. и более того, если я использую wp_check_password( 'hello', md5('hello'), 1 );
, он даже не проверяет, что находится внутри базы данных, и возвращает true. Разве это не ошибка?
Любые идеи, как я могу проверить пароль пользователя?
2 answers
Ваш пример работает правильно. Вы проверяете, совпадает ли пароль hello
с хэшированным hello
, что, естественно, происходит.
Не продумал это до конца. Ваш пример вызывает следующую проблему:
- Вы проверяете, соответствует ли
hello
md5 изhello
(вместо хэша из профиля пользователя). - Это так, а затем WP считает, что это правильно, но устаревший хэш md5 - который необходимо обновить.
- Он повторно хэширует
hello
и обновляет пользователя с его помощью, блокируя его (так как его пароль теперьhello
вместо того, что было раньше).
Смотрите функцию wp_authenticate_username_password()
для подробного примера, но основная идея такова:
$userdata = get_user_by('login', $username);
$result = wp_check_password($password, $userdata->user_pass, $userdata->ID);
Вы можете получить их хэшированный пароль из базы данных и сравнить его с записью, которую вы хотите проверить, используя wp_hash_password().
Чтобы проверить, соответствует ли пароль текущего пользователя "привет", попробуйте сделать следующее:
if ( $current_user->user_pass == wp_hash_password( 'hello' ) )