在codeigniter中使用ion auth时模拟用户

时间:2017-04-03 08:30:45

标签: php codeigniter

我已设置ion auth以在数据库中存储会话信息。 ci_session表包含以下字段

  

id,ip_address,timestamp,data

我可以使用此代码

获取当前会话的数据
$this->db->order_by('id', 'ASC');
$this->db->limit(1);
$last_session = $this->db->get('ci_sessions')->row_array();

print_r($last_session['data']);//prints current session data

我希望能够动态切换登录用户,并且我已经从这个要点借用了这个功能https://gist.github.com/anonymous/4440000

我已经修改过这种方式

 public function impersonate()
    {
        $identity = 'admin@admin.com';
        $goall = $this->config->item('identity', 'ion_auth');

            $query = $this->db->select($goall . ', username, email, id, active, last_login')
                ->where($goall, $this->db->escape_str($identity))
                ->limit(1)
                ->get('users');

            if ($query->num_rows() === 1)
            {
                $user = $query->row();

                $session_data = array(
                    'identity'             => $goall,
                    'username'             => $user->username,
                    'email'                => $user->email,
                    'user_id'              => $user->id, //everyone likes to overwrite id so we'll use user_id
                    'impersonating'        => true
                );

                $this->session->set_userdata($session_data);

                return TRUE;
            }

         else {

            return FALSE;

        }

    }

ci_sessions中的数据列如下所示

__ci_last_regenerate|i:1491200360;identity|s:15:"admin@admin.com";email|s:15:"admin@admin.com";user_id|s:1:"1";old_last_login|s:10:"1491199371";last_check|i:1491200371;message|s:29:"<p>Logged In Successfully</p>";__ci_vars|a:1:{s:7:"message";s:3:"old";}

为了能够切换用户,我想更新数据列以反映新用户的详细信息。

我试过json解码数据列数据,但它无效的json。您也可以使用此工具http://freeonlinetools24.com/json-decode

如何更新数据字段inroder以便能够切换登录的用户?。

1 个答案:

答案 0 :(得分:0)

这是一个可怕的,非常可怕的解决方案。您不应该需要解码其他用户的会话数据;我建议你找到另一种方法来实现你想做的任何事情。