多用户登录codeigniter(如何使用password_verify方法?)

Multiuser login codeigniter(how to use password_verify method?)

请大家帮忙,我已经用 password_hash 成功加密了我的密码,但是有什么解决方法可以使用 PHP password_verify 检查登录名和密码以进行多用户登录?

这是我的控制器:

public function index()
{
    $this->form_validation->set_rules('email','Email address','required');
    $this->form_validation->set_rules('password','Password','required');

    if($this->form_validation->run() == FALSE)
    {
        $this->load->view('view_login');    
    } else {
        $this->load->model('Model_members');

        $valid_user = $this->Model_members->check_credential();

        if($valid_user == FALSE)
        {
            $this->session->set_flashdata('error','');
            redirect("login");
        } else {
            $this->session->set_userdata('email', $valid_user->email);          

            if($this->session->userdata('groups') == '1')
            {
                redirect('home');
            }
            elseif($this->session->userdata('groups') == '2')
            {
                redirect('homepage');
            }
            elseif($this->session->userdata('groups') == '0')
            {
                redirect('test1');
            }
        }
    }
}

这是我的模型:

public function check_credential()
{
    $email = set_value('email');
    $password = set_value('password');

    $hasil3 = $this->db->where('email', $email)
                      ->where('password', $password)
                      ->limit(1)
                      ->get('users');

    if($hasil3->num_rows() > 0)
    {
        return $hasil3->row();
    } else {
        return array();
    }
    }

非常感谢您的帮助!!

请找到下面提到的解决方案,它会帮助你。

在控制器中

$userData['email'] = $this->input->post('email');
$userData['password'] = $this->input->post('password');
$valid_user = $this->Model_members->check_credential($userData);

在模型中,您的函数如下所示。

public function check_credential($param) {
    $hasil3 = $this->db->where('email', $param['email'])
            ->where('password', password_hash($param['password'], PASSWORD_DEFAULT, ['cost' => 10]))
            ->limit(1)
            ->get('users');

    if ($hasil3->num_rows() > 0) {
        return $hasil3->row();
    } else {
        return array();
    }
}

如果不起作用请告诉我。

控制器

//create array to pass data to model
$data = [
  'email' => $this->input->post('email'),
  'password' => $this->input->post('password')
];
//check model to see if user exists and if correct password
$user = $this->name_of_model->check_credential($data);

if(isset($user['error])){
    //return error message in some form
}

型号:

您想将流程一分为二,以便更好地报告错误。首先检查用户是否存在,然后检查密码是否正确

public function check_credential($data) {

 //see if user exists first
 $user = $this->db->where('email', $data['email'])
        ->get('users')->row_array();

 if($user){
    $success = (password_verify($data['password'],$user['password']));
    return ($success) ? $user : ['error'=>'Incorrect Password']
 }
 else{
   return ['error'=>'User doesn't exist'];
 }

}