Codeigniter - 登录检查始终失败

时间:2016-12-28 17:20:12

标签: php codeigniter codeigniter-3

我正在使用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);
}

当我输入正确的电子邮件和密码时,它显示错误的电子邮件和密码结果。

2 个答案:

答案 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,那么你就可以登录