使用password_verify登录CodeIgniter

时间:2019-01-09 19:31:55

标签: php codeigniter passwords

我正在尝试在CodeIgniter中实现登录实施,我在控制器中像Null一样在注册时对密码进行哈希处理,并且在同一控制器中,我尝试编写一种登录方法,如下所示:

password_hash($this->input->post('password'),PASSWORD_DEFAULT)

我的用户模型功能是

public function loginValidation() {
        $this->form_validation->set_rules('email', 'Email', 'trim|required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required');

        if ($this->form_validation->run()) {
            // true
            $email  =   $this->input->post('email');
            $password   =   $this->input->post('password');

            // User Model Loaded in constructor
            if ($this->user->canLogin($email, $password)) {
                $session_data   =   array('email' => $email );
                $this->session->set_userdata($session_data);
                redirect('profile/personal','Refresh');

            } else {
                $this->session->set_flashdata('error', 'Invalid Username or Password');
                //redirect('login','Refresh');

            }
        } else {
            // try again to login
            //redirect('login','Refresh');
        }
    }

我知道我必须public function canLogin($email, $password) { $this->db->where('email',$email); $this->db->where('password',$password); $query = $this->db->get($this->tableName); if ($query->num_rows() > 0) { return true; } else { return false; } } ,但我无法弄清楚。

如何通过电子邮件验证密码并重定向到所需的视图,即password_verify($string,$hash),并且正在通过AJAX调用进行请求。

1 个答案:

答案 0 :(得分:4)

您需要做的是从只有电子邮件匹配的数据库中获取记录(假设它是唯一键)。然后,您使用password_verify()比较返回的值。
这是非常粗糙且未经测试的,但是应该给您一个想法:

public function canLogin($email, $password) {
    $this->db->where('email',$email);
    // $this->db->where('password',$password);
    $query  =   $this->db->get($this->tableName);

    $row = $query->row();
    return $row ? password_verify($password, $row->password) : false;
}