Эта проблема, кажется, достаточно старая, я искал в интернете возможные решения, но, похоже, ничего не помогло.
Вот что я получил:
В теме у меня есть пользовательская форма, которая отправляет имя пользователя, пароль и адрес электронной почты в скрипт, используя следующую функцию:
function createSubscriberUser($username, $email, $password) {
$user_id = username_exists( $username );
if ( !$user_id and email_exists($email) == false ) {
$user_id = wp_create_user( $username, $password, $email );
} else {
$hash = __('User already exists. Password inherited.');
}
}
Это прекрасно работает! пользователь успешно создан как подписчик. Однако, когда я пытаюсь войти во вновь созданного пользователя, используя wp-login.php, я всегда получаю, что учетные данные недействительны.
Поэтому я использовал следующий фрагмент, чтобы посмотреть, что происходит:
$username = $_POST['user'];
$pass = $_POST['pass'];
$user = get_user_by( 'login', $username );
if ( $user && wp_check_password( $pass, $user->data->user_pass, $user->ID) )
echo " That's it";
else
echo " Nope";
Я всегда получаю «Нет» … но если я использую пользователя, созданного на панели инструментов, я получаю сообщение «Вот и все». Поэтому я предпочитаю, что хэши, генерируемые wp_create_user, всегда отличаются от хэшей, генерируемых wp_check_password при передаче простого текстового пароля в качестве ввода от пользователя.
Есть ли способ получить тот же хеш? войти из wp-login.php, а также программно?
Большое спасибо за вашу помощь.
Убедитесь, что вы вводите пароль в виде простого текста wp_create_user
функция. Я столкнулся с той же проблемой. Я хэшировал пароль и использовал его в wp_create_user
,
wp_create_user
очень похоже на функцию обертки для wp_insert_user
, Смотрите ниже исходный код:
function wp_create_user($username, $password, $email = '') {
$user_login = wp_slash( $username );
$user_email = wp_slash( $email );
$user_pass = $password;
$userdata = compact('user_login', 'user_email', 'user_pass');
return wp_insert_user($userdata);
}
wp_insert_user
сгенерирует свой собственный хэш md5.
В качестве альтернативы вы можете напрямую позвонить wp_insert_user
как это:
$user_login = wp_slash( $user_name );
$user_email = wp_slash( $user_email );
$user_pass = $user_password;
$userdata = compact('user_login', 'user_email', 'user_pass');
$user_id = wp_insert_user($userdata);
Других решений пока нет …