CodeIgniter Callback не работает для входа пользователя

Я проверил все вопросы этого типа, но ни один из них не работает для меня. Надеюсь, мне здесь помогут. У меня есть контроллер с именем index и модель с именем Index_model. Я написал функции входа и регистрации пользователя в контроллере индекса и выполнил связанные с данными запросы в модели, все работает нормально, кроме функции обратного вызова codeigniter.

Когда я пытаюсь проверить достоверность данных для входа в систему, используя обратный вызов, каждый раз, когда он возвращает false, и когда я удаляю обратный вызов, он работает нормально. Я не понимаю, где я делаю неправильно. Пожалуйста, найдите код ниже для моего контроллера и модели. Заранее спасибо.

контроллер:

class Index extends CI_Controller{

public function __construct(){
parent:: __construct();
$this->load->helper('url');
$this->load->model('index_model');
}

public function signin(){
$this->load->helper('form');
$data['title'] = "Sign In";
$data['headline'] = "Sign In";
$data['introduction'] = "Sign In to manage your business, clients and more!";
$data['include'] = "user/signin";
$this->load->view('template/template', $data);
}

public function login(){
$this->load->helper('url');
$this->load->helper('form');
$this->load->library('form_validation');

$this->form_validation->set_rules('username', 'Username', 'required|callback_validate_login');
$this->form_validation->set_rules('password', 'Password', 'required|md5');

if($this->form_validation->run() == TRUE){
$data['msg'] = "User Login Successfully!!";
$this->load->view('user/home', $data);
}else{
$this->signin();
}

}

public function validate_login(){
$this->load->library('form_validation');

$result = $this->index_model->validate_user();
if($result == TRUE){
return TRUE;
}else{
$this->form_validation->set_message('validate_login', 'Incorrect username / password.');
return FALSE;
}
}
}

Модель:

class Index_model extends CI_Model{
public function __construct(){
$this->load->database();
}

/******User Login*************/
public function validate_user(){
$username = $this->input->post('username');
$password = $this->input->post('password');

$this->db->where('username', $username);
$this->db->where('password', $password);
$query = $this->db->get('user');

if($query->num_rows() == 1){
return TRUE;
}else{
return FALSE;
}
}
}

Пожалуйста, просмотрите Мой код, это очень поможет.

-1

Решение

Вы должны получить параметр, который вы передаете функции, используя функцию обратного вызова, которая в данном случае является именем пользователя. поэтому измените свой код на это:

public function validate_login($username){ # get the parameter
$this->load->library('form_validation'); # you do not need this line here

$result = $this->index_model->validate_user($username); #chek the parameter
if($result == TRUE){
return TRUE;
}else{
$this->form_validation->set_message('validate_login', 'Incorrect username / password.');
return FALSE;
}
}
0

Другие решения

ты должен использовать

$this->db->where('password', md5($password));
/* you should use md5($password) instead of just $password since you are using md5 as hashing technique */

ты использовал

$this->form_validation->set_rules('password', 'Password', 'required|md5');

пароль преобразуется в md5 после запуска проверки, а не в процессе обратного вызова

$this->form_validation->run() //i.e. after this

Замечания : md5 совсем не безопасен в наши дни. остерегайтесь атак радужного стола.
лучше поменяй технику хеширования. Есть много вопросов, касающихся хеширования пароля & безопасность в СО.

0

Просто сделайте несколько изменений в своем коде

$this->form_validation->set_rules('password', 'Password', 'required|md5');

удалите md5 отсюда и добавьте функцию md5, где ваш пароль соответствует полю таблицы базы данных

В функции validate_user

$this->db->where('password', md5($password));
0
По вопросам рекламы [email protected]