2

codeigniter を使用して Web アプリケーションを作成しています。
ユーザーがページにアクセスする前に、ユーザーの権限を認証したいと考えています。
実際には、ログインページを除くほとんどすべてのコントローラーアクションは、モデルを呼び出して使用する必要があります

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

すべてのコントローラーで一般的なものにしたい。コントローラ クラスを継承する必要がありますか? どうすればそれができますか?

4

4 に答える 4

13

Codeigniter を使用するプロジェクトとその方法があります。

新しいコントローラーがある場合:

class xxxx extends MY_Controller { }

MY_Controller クラスの内部

function __construct() {
 // do your validations
}
于 2013-03-13T10:58:32.057 に答える
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();  
     }

それが役立つことを願っています。

于 2013-03-13T14:49:25.680 に答える
1

各コントローラーのコンストラクターに以下のコードを記述してください

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

/* check whether login or not */
if(!$this->login->check_session()){
redirect(‘/login’);
}
于 2013-03-13T11:14:49.867 に答える
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
    }
}    

詳細はこちら

于 2013-03-13T10:58:15.013 に答える