密码哈希验证结果返回0

时间:2015-02-15 10:42:45

标签: php codeigniter hmvc

我正在学习如何使用CI框架,目前正在处理用户登录表单。 Haven尚未创建用户注册,因此我手动将凭据添加到数据库中。由于我在本地测试了所有内容,因此我决定尝试使用无盐,这可能不是最好的方法。我使用表单验证和回调来根据数据库中的信息检查表单数据。

这是来自用户控制器的片段:

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;
    }
}

我确定这不起作用的原因是因为DB中的密码被视为文字字符串而不是哈希值,但我不知道我怎么做将其比作哈希。

1 个答案:

答案 0 :(得分:0)

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