我正在使用 codeigniter 编写一个 Web 应用程序。
我想在我们的用户访问页面之前验证他们的权限。
实际上除了登录页面几乎所有的控制器动作都需要调用模型并使用
$this->Users->validate($username, $password)
我想让它适用于每个控制器。我需要继承控制器类吗?我怎么能这样做?
我正在使用 codeigniter 编写一个 Web 应用程序。
我想在我们的用户访问页面之前验证他们的权限。
实际上除了登录页面几乎所有的控制器动作都需要调用模型并使用
$this->Users->validate($username, $password)
我想让它适用于每个控制器。我需要继承控制器类吗?我怎么能这样做?
我们有一个使用 Codeigniter 的项目以及我们的做法:
当你有一个新的控制器时:
class xxxx extends MY_Controller { }
在 MY_Controller 类里面
function __construct() {
// do your validations
}
最好的方法是您应该在 application/helper 文件夹中使用此名称或任何您想要但不要删除_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();
}
希望它会有所帮助。
请在每个控制器的构造函数中编写以下代码
$this->load->library(‘session’);
$this->load->model(‘login_model’,'login’,TRUE);
/* check whether login or not */
if(!$this->login->check_session()){
redirect(‘/login’);
}
过滤器使用前更正:
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
}
}
有关详细信息,请阅读此处