将用户登录时在会话数据中包括数据库条目(CodeIgniter)


Include db entry in session data when logging user in (CodeIgniter)

我想做的是在验证CI用户时,在设置他们的会话数据时,从数据库中设置的字段中提取一些数据。

目前,我已经掌握了这一点;

function validate()
{
    $query = $this->model_auth->validate();
        if ($query) // if the user's credentials validated 
        {
            $data = array(
                'username'      => $this->input->post('username'),
                'is_logged_in'  => TRUE
            );
            $this->session->set_userdata($data);
            redirect('dashboard/');
        } else {
            $data['error'] = 'Invalid User Id and Password combination';
            $this->load->view('view_login',$data);
        }
}

这是我的型号

function validate() {
        $this->db->where('username', $this->input->post('username'));
        $this->db->where('password', md5($this->input->post('password')));
        $query = $this->db->get('users');
        if($query->num_rows == 1) { return TRUE; } 
    }//validate

我想做的是设置这样的东西;

$data = array(
                'username'      => $this->input->post('username'),
                'user_level'    => $ThisIsSomethingWithinTheDB,
                'is_logged_in'  => TRUE
            );

在我的控制器中,$ThisIsSomethingWithinTheDB与数据库中user_level列下的相关条目相关。

我目前仍在学习,所以如果有任何帮助,我们将不胜感激。

如果您想将某个值设置为等于数据库中的某个值,则必须首先检索它。

我不太熟悉CI的ActiveRecord,因为我更喜欢使用Laravel和Eloquent,但从我看文档的情况来看:

$this->db->get('users')

相当于:

SELECT * FROM users

如果是这样的话,你应该能够设置:

$data['user_level'] = $ThisIsSomethingWithinTheDB

$this->session->set_userdata('user_level') = $ThisIsSomethingWithinTheDB

修改validate()函数,返回DB结果。

function validate()
{
    $this->db->where('username', $this->input->post('username'));
    $this->db->where('password', $this->input->post('password'));
    $query = $this->db->get('users');
    if ( $query->num_rows() > 0 )
    {
        $result = $query->result();
        return $result[0];
    }
    else
    {
        return false;
    }
}

现在,您可以访问数据库结果,就像在控制器中这样。。。

if ($query)
{
    $data = array(
        'username' => $this->input->post('username'),
        'user_level' => $query->user_level, // This is "user_level" row from your DB
        'is_logged_in' => true
    );
}

希望这能有所帮助。

感谢您的帮助,

我做到了以下几点;

模型

function validate() {
        $this->db->where('username', $this->input->post('username'));
        $this->db->where('password', md5($this->input->post('password')));
        $query = $this->db->get('users');
        if($query->num_rows == 1)
        {
            return $query;
        }
        else
        {
            return FALSE;
        }

    }

控制器

function validate()
{
    $query = $this->model_auth->validate();
        if ($query) // if the user's credentials validated 
        {
        $user_data = $query->row();
        $data = array(
            'username'      => $this->input->post('username'),
            'user_level'    => $user_data->user_level,
            'is_logged_in'  => TRUE
        );
        $this->session->set_userdata($data);
        redirect('dashboard/'); 
        } else {
        $data['error'] = 'Invalid User Id and Password combination';
        $this->load->view('view_login',$data);
        }
}

再次感谢您的帮助!