WordPress wp_create_user пароль не работает

Эта проблема, кажется, достаточно старая, я искал в интернете возможные решения, но, похоже, ничего не помогло.

Вот что я получил:

В теме у меня есть пользовательская форма, которая отправляет имя пользователя, пароль и адрес электронной почты в скрипт, используя следующую функцию:

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, а также программно?

Большое спасибо за вашу помощь.

0

Решение

Убедитесь, что вы вводите пароль в виде простого текста 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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru