Функция обратного вызова, возвращающая false CodeIgniter

#php #codeigniter #callback

#php #codeigniter #обратный вызов

Вопрос:

Почему мой код возвращает false в моем условии if в моем коде обратного вызова. Я попытался var_dump для каждого из их значений и

Вот вывод var_dump

 var_dump($old_password_hash); = string(32) "25d55ad283aa400af464c76d713c07ad"
var_dump($old_password_db_hash); = object(stdClass)#24 (1) { ["user_password"]=> string(32) "25d55ad283aa400af464c76d713c07ad" }
  

Два значения не удовлетворяют if($old_password_hash != $old_password_db_hash) {

Вот мой полный код

 public function oldpassword_check($old_password){
    $id = $this->input->post('userid');

    $old_password_hash = md5($old_password);
    $old_password_db_hash = $this->prof_model->fetch_pwrod($id);

    //var_dump($old_password_hash);

    var_dump($old_password_db_hash);

    if($old_password_hash != $old_password_db_hash) {

        $this->form_validation->set_message('oldpassword_check', 'Old password not match');
        return FALSE;

    } else {

        return TRUE;

    } 

}
  

Комментарии:

1. Я надеюсь, что вы не используете md5 для чего-либо, что требует безопасности

2. Используйте это для хэширования пароля php.net/manual/en/function.password-hash.php и это для проверки пароля php.net/manual/en/function.password-verify.php Ваш md5 небезопасен в настоящее время дни, не рекомендуемые для паролей

Ответ №1:

$old_password_hash является строкой

$old_password_db_hash является объектом

Они никогда не будут равны. string никогда не равно object .

Вот почему $old_password_hash != $old_password_db_hash всегда верно. И поэтому FALSE возвращается.

Правильная проверка:

 // take `user_password` property of an object
if ($old_password_hash != $old_password_db_hash->user_password) {
  $this->form_validation->set_message('oldpassword_check', 'Old password not match');
  return FALSE;
}
else {
  return TRUE;
}
  

Комментарии:

1. не могли бы вы объяснить мне, сэр. как вы превратили объект в строку?

2. Я этого не сделал. Вместо этого я беру свойство объекта. И свойство ( user_password ) также имеет тип string .