Не удается войти в систему администратора WordPress с хешированным вручную паролем при пользовательской регистрации пользователя в WordPress.

Я создал пользовательскую страницу регистрации на своем сайте WordPress, чтобы посетители могли зарегистрироваться. На этой странице я собираю пароль пользователя и сохраняю его после хэширования пароля, $password_hash = wp_hash_password($password). Но когда я пытаюсь войти в wp-admin, мне пишет Неверный пароль.

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

function process_registration() {
   $password = sanitize_text_field( $_POST['signup_password'] );
   //Grabbing other values like firstname, lastname etc.

  $password_hash = wp_hash_password( $password );

  $user_data = array(
     //other fields...
     'user_pass' => $password_hash,
     'role' => 'contributor',
  );

  $new_user_id = wp_insert_user( $user_data );

  if( is_wp_error( $new_user_id ) ) {
    //Do some stuff
  } else {
    // Do something else
  }
}

Однако пользователи, созданные из панели wp-admin, могут нормально войти в систему. Разве нельзя собрать пароль пользователя и сохранить его в пользовательской регистрационной форме, а затем использовать его для входа в систему?

Я все еще новичок в WordPress.

Обновлять

Изучив некоторые статьи и темы, я понял, что генерация хешированной строки даже для одного и того же текста всегда будет отличаться, и поэтому невозможно сопоставить хешированный пароль с текущим. Если да, то как другой пользователь, созданный внутри администратора WordPress, может войти в систему? Это использует другой подход? Если да, то что? Но это не то, что я упускаю?


person Subrata Sarkar    schedule 29.11.2017    source источник
comment
Эта функция sanitize_text_field() обычно может быть проблемой, когда вы имеете дело с password_hash(), вы не используете какой-либо другой механизм экранирования/механизм очистки   -  person Masivuye Cokile    schedule 29.11.2017
comment
Я понял, что генерация хешированной строки даже для одного и того же текста всегда будет отличаться, и поэтому невозможно сопоставить хэшированный пароль с текущим - как и должно быть. Вы же не ожидаете, что у вас будет такой же хэш, не так ли? С другой стороны, MD5 создаст тот же хэш. Ваш вопрос немного неясен; какова длина столбца пароля?   -  person Funk Forty Niner    schedule 29.11.2017
comment
@MasivuyeCokile Я попробовал ваше решение, но безуспешно.   -  person Subrata Sarkar    schedule 29.11.2017
comment
@ Fred-ii - это VARCHAR (255). Согласно тому, что вы сказали, когда пользователи создаются в панели администратора, их пароли хэшируются с использованием механизма MD5?   -  person Subrata Sarkar    schedule 29.11.2017
comment
Возможно, вы используете другой механизм хеширования, отличный от административной области.   -  person Masivuye Cokile    schedule 29.11.2017
comment
OK. Ну, вы не должны дезинфицировать пароли, потому что это может сыграть роль здесь, где могут быть символы, которые изменяются, и/или где-то может быть введен пробел. Пароли, такие как 123'\$#--<br>, считаются допустимыми.   -  person Funk Forty Niner    schedule 29.11.2017
comment
@ Fred-ii- Я попытался не использовать sanitize_text_field в соответствии с предложением Masivuye. Но это не сработало.   -  person Subrata Sarkar    schedule 29.11.2017
comment
@SubrataSarkar, на какой версии wp ты работаешь?   -  person Masivuye Cokile    schedule 29.11.2017
comment
@MasivuyeCokile 4.9, Мультисайт   -  person Subrata Sarkar    schedule 29.11.2017


Ответы (1)


person    schedule
comment
Спасибо! Но не могли бы вы рассказать, чем это отличается от моего подхода? Я, вероятно, делаю то же самое, за исключением того, что вы использовали обновление, в то время как я его не использую и делаю вставку за один раз. Как это решит проблему? - person Subrata Sarkar; 30.11.2017
comment
Вау! Это сработало!! Было бы здорово, если бы вы сказали мне, почему. - person Subrata Sarkar; 30.11.2017
comment
Я понял!! Проблема в том, что я создавал хешированную строку для пароля на основе пользовательского ввода, прежде чем передавать его в массив. Функция wp_insert_user сама заботится о хэше пароля, и нам не нужно об этом беспокоиться. Но в вашем решении, поскольку вы вставляете данные с помощью прямого запроса на вставку, вы должны сначала создать хеш :) Нижняя строка: wp_insert_user функция требует простого текстового пароля. Теперь мой подход также отлично работает. Ваше решение на самом деле привело меня в правильном направлении, чтобы выяснить проблему. Большое спасибо, что выручили меня!! - person Subrata Sarkar; 30.11.2017