Codeigniter Hooks前进

时间:2012-07-10 07:16:55

标签: codeigniter hook

您好我正在使用post_controller挂钩来验证用户是否已登录 但是当验证失败时,我将用户重定向到登录控制器.... 现在问题是当它重定向到默认控制器时,再次调用post_controller钩子,这样无限循环就会重复启动重定向。 我想为除登录控制器之外的每个控制器调用post_controller挂钩.... 还有一种方法,我不需要一次又一次地加载会话库,因为,如果用户登录,那么它在post控制器中加载会话库以及通过配置文件中的自动加载... 这是我的代码     


    //Hooks
    $hook['post_controller'] = array(
                                'class'    => 'is_login',
                                'function' => 'index',
                                'filename' => 'is_login.php',
                                'filepath' => 'hooks'
                                ); 

//Is_Login Hook class is_login { function __construct(){ $this->CI =& get_instance(); if(!isset($this->CI->session)) //Check if session lib is loaded or not $this->CI->load->library('session'); //If not loaded, then load it here } public function index() { $login_id = $this->CI->session->userdata('login_id'); $login_flag = $this->CI->session->userdata('logged_in'); if ($login_flag != TRUE || $login_id == "") { redirect(site_url().'/welcome_login', 'refresh'); } } }

3 个答案:

答案 0 :(得分:4)

似乎它不是使用Codeigniter挂钩的好地方。最好是在应用程序中扩展Controller类,在构造函数中可以检查用户是否已登录并重定向到登录控制器。但是不需要从控制器扩展登录控制器,而是从CI_Controller扩展它。

答案 1 :(得分:1)

我通过钩子验证登录没有问题。我只是在注销时生成登录视图并exit应用程序,以便显示的唯一内容是登录,并且控制器(和其余部分)将被忽略。

真的不需要重定向。

答案 2 :(得分:0)

if ($this->CI->uri->segment(1) != 'auth') {

    //Authenticate
    if (empty($user->user_id))redirect('auth');

}