CodeIgniter密码未针对数据库进行验证

时间:2012-01-01 20:34:23

标签: codeigniter passwords

我在CodeIgniter(电子邮件/密码)中设置了我的登录功能。电子邮件字段正在对数据库进行正确验证,但只要验证电子邮件,就会接受任何密码 - 即使是空白密码。

我需要弄清楚为什么只针对数据库检查电子邮件字段以及如何获取密码字段以对数据库进行验证。

补充工具栏:我打算接下来加密密码,但希望确保该字段首先针对数据库进行验证。然后我将添加安全层。

来自登录控制器:

 function login_validation()

{
    $this->load->model('foo_model');
    $query = $this->foo_model->validate();

    if($query) 
    {
        $data = array(
            'email' => $this->input->post('email'),
                            'password' => $this->input->post('password'),
            'is_logged_in' => true
        );
        $this->session->set_userdata($data);
        redirect('foodash');
    }
    else
    {
        $this->index(); // login page
    }
}

来自foo模型:

function validate()
{
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', $this->input->post('password'));

    $query = $this->db->get('footable');

    if($query->num_rows == 1)
    {
        return true;
    }           
}   

}

图示: 我使用jquery屏蔽了我的密码字段,以便输入时文本不可见。我不得不更改密码字段的名称 - 一旦我在模型中更改了密码字段,一切都运行良好。

3 个答案:

答案 0 :(得分:1)

图示:

我使用jquery屏蔽了我的密码字段,以便输入时文本不可见。我不得不更改密码字段的名称 - 一旦我在模型中更改了密码字段,一切都运行良好。

答案 1 :(得分:0)

false声明后,尝试在validate()函数中返回IF

也尝试不同的语法:

$query = $this->db->get_where('footable', array(
    'email' => $this->input->post('email'),
    'password' => $this->input->post('password')
));

答案 2 :(得分:0)

密码正在针对数据库进行验证,但是当电子邮件或密码错误时,validate()的返回值未定义。这可能导致不可预测的结果。我建议:

function validate()
{
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', $this->input->post('password'));

    $query = $this->db->get('footable');

    return ($query->num_rows() == 1);
}