2014-12-28 3 views
0

Эта проблема кажется достаточно старой, я искал через Интернет для возможных решений, но ничто, кажется, не завершилось успешным способом сделать это.Wordpress wp_create_user пароль не работает

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

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

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()] (http://codex.wordpress.org/Function_Reference/wp_create_user) они используют wp_generate_password() для создания пароль. Возможно, посмотрите, что возвращает wp_generate_password(), и это может помочь вам отладить дальнейшие действия. – user2058037

+0

wp_generate_password создает случайную строку из n длины, это обычный текст, поэтому wp_create_user все еще хэш, даже если он случайный. – RicardoE

+0

, вероятно, было бы хорошо показать выход переменных? – David

ответ

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); 
Смежные вопросы