你好,我正在使用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');
}
}
}
发布于 2012-07-10 15:27:20
这似乎不是一个使用Codeigniter钩子的好地方。最好是在应用程序中扩展controller类,并在构造函数中检查用户是否已登录并重定向到登录控制器。但是不需要从您的控制器扩展登录控制器,而是从CI_Controller扩展它。
发布于 2012-07-10 16:53:40
我通过钩子验证登录没有问题。我只是在注销和exit
应用程序时生成登录视图,这样唯一显示的就是登录,而控制器(和rest)会被忽略。
不需要重定向,真的。
发布于 2013-12-23 10:01:05
if ($this->CI->uri->segment(1) != 'auth') {
//Authenticate
if (empty($user->user_id))redirect('auth');
}
https://stackoverflow.com/questions/11408379
复制相似问题