2012-01-01 5 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 
    } 
} 

Из модели 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, чтобы при вводе текста текст не отображается. Мне пришлось изменить имя поля моего пароля - как только я изменил его в модели, все сработало отлично.

ответ

1

понял это:

я маскировала мое поле пароля с помощью JQuery, чтобы текст не был виден при вводе. Мне пришлось изменить имя поля моего пароля - как только я изменил его в модели, все сработало отлично.

0

Попробуйте вернуть false в вашу validate() функцию после вашего заявления IF.

попробовать также другой синтаксис:

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

Без синтаксиса или с использованием false после утверждения IF. Все еще можно войти без пароля или пароля. – chowwy

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

+0

В ($ query-> num_rows == 1) скобки отсутствуют, это должно быть ($ query-> num_rows() == 1) – CodeDownZero

+0

Я видел ваше обновление; попробовал синтаксис, предложенный w/num_rows(), и я все еще могу войти с любым или без пароля. Электронная почта проверяется, но не пароль. – chowwy