密码哈希验证的结果 returns 0

Result returns 0 on password hash validation

我正在学习如何使用 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;
    }
}

我确定这不起作用的原因是因为数据库中的密码被视为文字字符串而不是散列,但我不确定如何将它作为散列。

您可以这样做:从模型中获取用户,然后使用用户的散列值检查密码中保存的值。如果你使用 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();
}