您好我正在使用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');
}
}
}
答案 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');
}