-1

我检查了所有此类问题,但没有一个对我有用。希望我能在这里得到一些帮助。我有一个名为 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;
        }
    }
}

请查看我的代码,这将是一个很大的帮助。

4

3 回答 3

0

只需对您的代码进行一些更改

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

从此处删除 md5 并添加 md5 函数,其中您的密码与您的数据库表字段匹配

在 validate_user 函数中

$this->db->where('password', md5($password));
于 2014-12-30T15:35:52.120 回答
0

您必须使用回调获取传递给函数的参数,在本例中为用户名。所以将您的代码更改为:

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;
    }
}
于 2014-10-14T11:09:58.257 回答
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 现在一点也不安全。当心彩虹表攻击。更好地改变散列技术。关于 SO 中的密码哈希和安全性有很多问题。

于 2014-10-14T12:36:22.003 回答