Проверьте пароль пользователя


Я хочу проверить, есть ли у пользователя определенный пароль, поэтому я пробовал его с помощью wp_check_password, но учетная запись, для которой он проверен, выходит из системы и не может войти снова, пока в коде не появится вызов wp_check_password.

Покопавшись в коде, я обнаружил, что он устанавливает пароль с помощью нового хэша. и более того, если я использую wp_check_password( 'hello', md5('hello'), 1 );, он даже не проверяет, что находится внутри базы данных, и возвращает true. Разве это не ошибка?

Любые идеи, как я могу проверить пароль пользователя?

 4
Author: Ashfame, 2011-03-30

2 answers

Ваш пример работает правильно. Вы проверяете, совпадает ли пароль hello с хэшированным hello, что, естественно, происходит.

Не продумал это до конца. Ваш пример вызывает следующую проблему:

  1. Вы проверяете, соответствует ли hello md5 из hello (вместо хэша из профиля пользователя).
  2. Это так, а затем WP считает, что это правильно, но устаревший хэш md5 - который необходимо обновить.
  3. Он повторно хэширует hello и обновляет пользователя с его помощью, блокируя его (так как его пароль теперь hello вместо того, что было раньше).

Смотрите функцию wp_authenticate_username_password() для подробного примера, но основная идея такова:

$userdata = get_user_by('login', $username);
$result = wp_check_password($password, $userdata->user_pass, $userdata->ID);
 12
Author: Rarst, 2011-03-30 21:05:52

Вы можете получить их хэшированный пароль из базы данных и сравнить его с записью, которую вы хотите проверить, используя wp_hash_password().

Чтобы проверить, соответствует ли пароль текущего пользователя "привет", попробуйте сделать следующее:

if ( $current_user->user_pass == wp_hash_password( 'hello' ) )
 4
Author: goldenapples, 2011-03-30 20:18:51