2011-08-16 37 views
0

如果用户没有登录我想覆盖现有的控制器,并调用auth/login之一,而不是保持浏览器URI的机智。 (每个用户必须登录才能使用该站点)代码点火器2 - 控制器/方法覆盖

我已经尝试过预控制器挂钩,但它太早。此时auth库尚未实例化。 由于目标控制器已被实例化,后控制器挂钩已经太晚了。

编辑库的构造似乎也没有意义,因为它已经被创建..所以我有点卡住..

任何想法吗? :) ..

感谢

回答

4

我会覆盖默认控制器并在每个控制器中扩展。下一个代码./app/core/MY_Controller.php:创建一个新的文件

class Secure_Controller extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 

     /* replace this code with yours */ 
     if(!$this->session->userdata('logged_in')) { 
      redirect(base_url() . 'login', 'refresh'); // your login url 
     } 
    } 
} 

然后,使用每个控制器此代码,您应该记录的用户

class Main extends Secure_Controller { 
+0

很好的答案。这将显示你如何做到这一点http://philsturgeon.co.uk/news/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY –

+0

感谢您的答复。我将这与一个名为_remap的方法结合起来作为一种代理。再次感谢。 – Lee

0

你有没有考虑刚保存的URI来flashdata,访问者重定向到另一个控制器(登录页面),然后只是把引荐到一个隐藏的表单字段?我在使用Codeigniter的一个网站上做同样的事情,它工作正常。唯一的区别是在这个过程中URI并不完整。

+0

我可以访问认为它认为我不知道“如何”确定是..如果黑客阻止任何重定向发生不会控制器只是继续和完成..重定向是否停止代码点火器执行过程? – Lee