Php codeigniter钩子检查用户是否登录
我目前正在尝试添加到我的验证钩子(检查用户/公司是否处于活动状态),通过一些修补,我成功地使其正常工作 我现在正在尝试做我在每个类>函数(或_构造)中所做的事情,并对用户是否使用我的会话数据“loginuser”(设置为布尔值)登录进行基本检查 我正试图使用这个,但不断得到太多的重定向。这与我在_构造或每个公共函数中使用的代码相同,并且它在那里工作得非常完美(非对象的更改除外) 我不知道为什么它在名为“post\u controller\u constructor”的钩子中不起作用。 我可能忽略了一些非常简单的东西,但我已经在圈里转了好几个小时了,google/所以搜索者根本没用。这也是一件非常基本的事情Php codeigniter钩子检查用户是否登录,php,codeigniter,Php,Codeigniter,我目前正在尝试添加到我的验证钩子(检查用户/公司是否处于活动状态),通过一些修补,我成功地使其正常工作 我现在正在尝试做我在每个类>函数(或_构造)中所做的事情,并对用户是否使用我的会话数据“loginuser”(设置为布尔值)登录进行基本检查 我正试图使用这个,但不断得到太多的重定向。这与我在_构造或每个公共函数中使用的代码相同,并且它在那里工作得非常完美(非对象的更改除外) 我不知道为什么它在名为“post\u controller\u constructor”的钩子中不起作用。 我可能忽略
回答:对于任何在家玩的人来说:
function logged_in() {
$CI =& get_instance();
if(!$CI->session->userdata('loginuser')) {
if (uri_string() != 'account/login' && uri_string() != 'login' && uri_string() != 'account/register'){
$CI->session->set_flashdata('flashError', 'Please login to continue');
redirect('account/login');
}
}
}
你的代码正在做你想做的事情,但是有一点疏忽 在执行任何类型的重定向之前,需要检查当前路由是否为登录页面 我想,当您以前在控制器构造函数中进行检查时,您没有将其放入帐户控制器
If (user is not logged in) {
If (Current route is not a login page) {
Redirect user to login page
}
}
我不知道你的意思,作为一个钩子,它独立于我重定向到的实际控制器?我已经在同一个控制器(不同的函数)的其他代码中使用了相同的重定向,它工作正常吗?我在登录控制器中检查用户是否已登录以防止显示登录屏幕,但正在检查的变量是否已取消设置?如果($this->form\u validation->run()==FALSE和$this->session->userdata('loginuser')==TRUE){redirect(site\u url());}我也有以下路由:$route['login']='account/login'$路由['account/login']='account/login';当您在post_controller_构造函数钩子中放入某些内容时,该代码将在创建任何控制器后执行。当有人进入一个页面时,这很好,他们需要登录,所以它会将他们重定向到登录页面。然后,钩子代码检查它们是否在创建帐户控制器后登录,并将它们重定向到登录页面。然后它会一次又一次地执行相同的操作,因此会出现“太多”重定向错误。在重定向用户之前,您需要检查当前路由是否为account/login。啊,我明白了,那么我应该在钩子中添加对该路由的检查,并将其排除在外吗?
If (user is not logged in) {
If (Current route is not a login page) {
Redirect user to login page
}
}