Результат возвращает 0 при проверке пароля

Я нахожусь в процессе изучения того, как использовать инфраструктуру CI, и в настоящее время я работаю над формой входа пользователя. Еще не создали регистрацию пользователя, поэтому я вручную добавляю учетные данные в базу данных. Поскольку я тестирую все локально, я решил попробовать crypt без соли, что, вероятно, не лучший метод. Я использую проверку формы и обратный вызов, чтобы сравнить данные формы с информацией в базе данных.

Вот фрагмент из контроллера пользователя:

function password_check($password) {

$username = $this->input->post('username', TRUE);

$password = Modules::run('security/create_hash', $password);

$this->load->model('mdl_users');
$result = $this->mdl_users->password_check($username, $password);

if ($result == FALSE) {
    //$this->form_validation->set_message('password_check', 'Please login using the correct credentials!');
    //return FALSE;
    echo $password;
    echo '<br/><br/>';
    echo $result;
    echo '<br/><br/>';
}
    else {
        return TRUE;
    }
}

Я повторил пароль, и результат тестирования и пароль отображаются как хешированные.

Вот метод password_check:

function password_check($username, $password) {
    $table = $this->get_table();
    $this->db->where('username', $username);
    $this->db->where('password', $password);
    $query=$this->db->get($table);
    $num_rows = $query->num_rows();
    return $num_rows;
    if ($num_rows>0) {
        return TRUE;
    } else {
        return FALSE;
    }
}

Я уверен, что причина этого не в том, что пароль в БД обрабатывается как буквенная строка, а не как хеш, но я не уверен, как можно сравнить его как хеш.

1 ответ

Решение

Вы можете сделать что-то вроде этого: получить пользователя из модели, а затем проверить сохраненное значение из пароля с хэшированным значением от пользователя. Если бы вы использовали md5, это выглядело бы примерно так.

контроллер

$this->load->model('user_model');

public function login() {
   $name = $this->input->post('name');
   $password = $this->input->post('password');

   $user = $this->user_model->get_user_through_name($name);
   if($user['password'] == md5($password)) {
      //logged in
   } else {
      //wrong password
   }
}

модель

public function get_user_through_name($name) {
    $query = $this->db->get_where('Users', array(
        'username' => $name
    ));
    return $query->row_array();
}
Другие вопросы по тегам