每个控制器和操作之前的Codeigniter身份验证

时间:2013-03-13 10:54:36

标签: php codeigniter

我正在使用codeigniter编写Web应用程序 我想在用户访问页面之前验证用户的权限 实际上除了登录页面之外几乎所有控制器动作都需要调用模型并使用

$this->Users->validate($username, $password)

我想让每个控制器都通用。我需要继承控制器类吗?我怎么能这样做?

4 个答案:

答案 0 :(得分:13)

我们有一个使用Codeigniter的项目以及我们的方式:

当你有一个新的控制器时:

class xxxx extends MY_Controller { }

在MY_Controller类中

function __construct() {
 // do your validations
}

答案 1 :(得分:2)

最好的方法是你应该在你的应用程序/帮助文件夹中使用这个名字或者你想要的任何人创建一个帮助文件,但是不要删除 _helper ,你应该使用这个名字 authentication_helper ,并将以下代码作为您的代码

    <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    function varify_session(){
       $CI = &get_instance();
       $user_session_id = $CI->session->userdata('logged_in');

       if($user_session_id  ==  '') {
        redirect('login');
       }
   }
   ?>  

使用您的代码查找代码。 然后在您的自动加载文件中并将其放入帮助程序

     $autoload['helper'] = array('authentication');

然后你只需要将这一行放入你的每个控制器构造函数中,就像这样

     function __construct()
     {
         parent::__construct();
         varify_session();  
     }
希望它会有所帮助。

答案 2 :(得分:1)

请在每个控制器的构造函数中写下面的代码

$this->load->library(‘session’);
$this->load->model(‘login_model’,'login’,TRUE);

/* check whether login or not */
if(!$this->login->check_session()){
redirect(‘/login’);
}

答案 3 :(得分:0)

在过滤器使用前更正:

class Test extends Controller {

    var $before_filter = array();

    var $after_filter = array();

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

        $this->before_filter[] = array(
            'action' => 'before_filter_run',
        );

    }

    function before_filter_run() {
        // Auth here
    }
}    

有关详细信息,请阅读here