我正在使用codeigniter登录和注册,注册工作正常,但登录检查失败,无法找到解决方案。
这是模型和控制器。
模型(User_model.php)
public function resolve_user_login($email, $password)
{
$this->db->select('password');
$this->db->from('user');
$this->db->where('email', $email);
$hash = $this->db->get()->row('password');
return $this->verify_password_hash($password, $hash);
}
private function verify_password_hash($password, $hash)
{
return password_verify($password, $hash);
}
Controller(User.php)
public function login()
{
$email = $this->input->post('email');
$password = $this->input->post('password');
$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
if ($this->form_validation->run() == FALSE)
{
$data['title'] = 'Login';
$this->load->view('default/header', $data);
$this->load->view('default/login');
$this->load->view('default/footer');
} else {
if ($this->User_model->resolve_user_login($email, $password))
{
echo 'Everything is good';
} else {
// error
$this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Wrong e-mail or password</div>');
redirect('login');
}
}
}
private function hash_password($password)
{
return password_hash($password, PASSWORD_BCRYPT);
}
当我输入正确的电子邮件和密码时,它显示错误的电子邮件和密码结果。
答案 0 :(得分:1)
像这样更改模型功能。请注意,如果您使用以下代码,则不再需要verify_password_hash()函数。
public function resolve_user_login($email, $password)
{
$query = $this
->db
->where('email',$email)
->where('password',password_hash($password, PASSWORD_DEFAULT))
->limit(1)
->get('user');
if($query->num_rows()>0)
{
return $query->result();
}
else
{
return false;
}
}
并在控制器中稍作修改
if ($this->User_model->resolve_user_login($email, $password)!==False)
{
echo 'Everything is good';
}
真的希望这种方法适合你。如果没有在评论中指定错误。
答案 1 :(得分:-1)
没有办法解密像bcyrpt或codeigenter的散列这样的散列你可以使用php的方法password_verify('your_word', 'the_hash' );
创建一个条件,如果它返回true,那么你就可以登录