2012-01-01 91 views
1

我已在CodeIgniter(电子邮件/密码)中设置了我的登录功能。电子邮件字段正在根据数据库正确验证,但只要电子邮件被验证,任何密码都被接受 - 即使是空白密码。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 
    } 
} 

从富模式:

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输入文本时不可见。我不得不改变我的密码字段的名称 - 一旦我在模型中改变它,一切都很完美。

回答

1

想通了:

我使用jquery,这样输入的时候文本是不可见的遮蔽我的密码字段。我不得不改变我的密码字段的名称 - 一旦我在模型中改变它,一切都很完美。

0

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

也可以尝试不同的语法:

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

使用此语法或在IF语句后使用false不会更改。仍然可以使用无密码或任何密码进行登录。 – chowwy 2012-01-01 23:14:52

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); 
} 
+0

与我的代码相同的结果;电子邮件验证,任何密码(或无密码)被接受。 – chowwy 2012-01-01 23:17:08

+0

In($ query-> num_rows == 1)括号丢失,它必须是($ query-> num_rows()== 1) – CodeDownZero 2012-01-02 02:29:14

+0

我看到您的更新;尝试了你建议的语法w/num_rows(),我仍然可以用任何密码或没有密码登录。电子邮件正在验证,但没有密码。 – chowwy 2012-01-02 02:38:09