使用Bcrypt和Codeigniter登录

时间:2016-06-08 14:09:39

标签: codeigniter login bcrypt

使用Bcrypt登录代码点火器时遇到问题。 密码在我的数据库中进行哈希处理。我已经成功从我的数据库中检索了哈希密码,但我似乎无法完成验证。

检索哈希密码:

 function getPass($username)
{
    $this->db->select('password');
    $this->db->from("users");
    $this->db->where("username",$username);

    $query = $this->db->get();
    foreach ($query->result() as $row)
    {
        return $row->password;
    }
    }
}

我的验证功能是我尝试检查原始的哈希密码:

 public function validate($hashedpass,$password)
    {

   $this->db->where('username', $this->input->post('username', true));

if ($this->bcrypt->check_password($password,$hashedpass)) { 
            return true;
        } else {
            return false;
        }
}

我的控制员:

     public function process()
    {

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

        $hashedpass = $this->login_model->getPass($username);
 $query = $this->login_model->validate($password,$username,$hashedpass);


        if($query){
            // If there is a user, then create session data and login etc..
}

任何人都知道我在验证功能中出错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:0)

我怀疑问题出在你没有显示的check_password函数中。另外,请考虑使用现有的CodeIgniter库,例如https://github.com/benedmunds/CodeIgniter-Ion-Auth

添加了回复评论的信息,因为评论时间过长:

它包括bcrypt作为可用的加密库。该插件是在几年前制作的,我认为bcrypt不是默认设置,因为它当时并不普遍支持,但它包含了如何使其成为默认设置的非常简单的说明。

它是一个非常即插即用的库,需要几分钟才能实现,还具有用于分组权限集的用户组,并具有放入控制器并检查是否有权使用所请求的特定页面/权限的功能。

它还包括一个管理GUI,有简单的页面来管理用户和组,它有一些前端页面,如登录,忘记密码等。

它是由CodeIgniter爱好者为CodeIgniter爱好者建造的!它完全兼容3.0,我在很多项目中使用它。

答案 1 :(得分:0)

我注意到您对validate的调用有3个参数

$query = $this->login_model->validate($password,$username,$hashedpass);

但你的原型只有两个

public function validate($hashedpass,$password)

此行似乎未使用......

$this->db->where('username', $this->input->post('username', true));