Я хочу проверить, есть ли у пользователя определенный пароль, поэтому я пытался его использовать, wp_check_password
но учетная запись, для которой он проверяется, выходит из системы и не может снова войти в систему, пока wp_check_password
в коде не будет вызова.
Копаясь в коде, я обнаружил, что он устанавливает пароль, используя новый хэш. и более того, если я использую wp_check_password( 'hello', md5('hello'), 1 );
, он даже не проверяет, что находится внутри базы данных, и возвращает true. Разве это не ошибка?
Любые идеи, как я могу проверить пароль пользователя?
Ваш пример работает корректно. Вы проверяете,
hello
соответствует ли пароль хешированномуhello
, что, естественно, и происходит.Не продумал. Ваш пример вызывает следующую проблему:
hello
соответствует ли md5hello
(вместо хеша из профиля пользователя).hello
и обновляет пользователя с ним, блокируя его (поскольку его пароль теперьhello
вместо того, что было раньше).Подробный
wp_authenticate_username_password()
пример см. в функции, но основная идея такова:Но это не совпадает во всех обстоятельствах, и я предположил, что проблема была в этом. Во-первых, хэш-функция пароля является подключаемой, поэтому она не обязательно использует md5 (на самом деле, я не думаю, что она используется по умолчанию — по умолчанию используется phpass).
@goldenapples нет смысла переопределять
wp_hash_password()
и оставлятьwp_check_password()
. Несовпадение хешей просто не позволит никому пройти проверку, не так ли? 🙂О, ты прав.
wp_check_password()
будет работать так, как вы использовали его в своем ответе. Я имел в виду его первоначальный вопрос, проверяя «привет» на md5 «привет», который потерпит неудачу, если md5 не является алгоритмом, который фактически используется вwp_hash_password
…@goldenapples native
wp_hash_password()
поддерживает md5 для обратной совместимости, он повторно хэширует такие пароли при проверке. Теперь, когда я думаю об этом, это, вероятно, проблема в исходном вопросе…Да, если два заданных пароля совпадают с использованием md5, wp_check_password сбросит пароль пользователя, используя текущую функцию хеширования. Итак, в исходном вопросе, поскольку два заданных пароля совпали, он изменил пароль пользователя на «привет»…
работает иначе, чем
if ( !wp_check_password( $xx_new_password, $xx_userinfo->user_pass, $xx_id ) )
Weird! Спасибо за помощь!Это неправильно.
wp_hash_password()
применяет (в 2020 году) случайную соль к паролю перед его хешированием, поэтому никакие два вызова не возвращают одно и то же значение.Вы можете получить их хешированный пароль из базы данных и сравнить его с записью, которую вы хотите проверить, используя wp_hash_password().
Чтобы проверить, соответствует ли пароль текущего пользователя «hello», попробуйте следующее: