我试图做一个简单的路由规则,只允许经过验证的用户对某些控制器。
要做到这一点,我想运行precontroller钩和检查,如果用户使用CI会议记录。 但是,我必须知道用户想要访问哪个控制器。 如何在一个钩子函数知道这一点?
我试图做一个简单的路由规则,只允许经过验证的用户对某些控制器。
要做到这一点,我想运行precontroller钩和检查,如果用户使用CI会议记录。 但是,我必须知道用户想要访问哪个控制器。 如何在一个钩子函数知道这一点?
$这 - >路由器 - > FETCH_CLASS();
扩展是CI_Controller这应该工作。
我不认为挂钩的最佳做法你想在这里实现什么
你可以尝试以下方法:您需要创建中间控制器,你将用户扩展而非是CI_Controller,将有认证检查和重定向到正确的控制器
阅读本教程由jondavidjohn一步一步创建
http://jondavidjohn.com/blog/2011/01/scalable-login-system-for-codeigniter-ion_auth
您768,16能够10分钟后得到的想法
不能你只要把认证的控制器构造函数? 当项目实例,你可以做的检查有它就会被调用。 您也可以随时扩展是CI_Controller,把逻辑在里面,这样你可以做你检查的有(和使用这 - >路由器 - > FETCH_CLASS()的建议)。
如果你不想去扩展控制器的路线,我可以看到有你的逻辑,那么你有因为CI对象不在pre_controller_hook存在这里使用本地PHP。
因此,得到URI,然后解析它来获得控制:
$uri = $_SERVER['REQUEST_URI'];
$segments = explode("/", $uri);
// if you're removing index.php from your urls, then
$controller = $segments[0];
// if you're not removing index.php
$controller = $segments[1];
在你的自动加载库类扩展是CI_Controller。
事情是这样的:
class MyAuthLibrary extends CI_Controller {
var $ci;
function __construct() {
$this->ci = &get_instance();
$route = $this->ci->router->fetch_class();
if( ($route !== 'login') && !$this->ci->session->userdata('email_address') ) {
redirect('login');
}
}
}