1

特定のコントローラーに対して認証されたユーザーのみを許可する単純なルーティングルールを作成しようとしています。

これを実現するために、プリコントローラーフックを実行し、ユーザーがciセッションを使用してログインしているかどうかを確認します。ただし、ユーザーがどのコントローラーにアクセスしたいかを知る必要があります。フック関数でこれをどのように知ることができますか?

4

5 に答える 5

4

$ this-> router-> fetch_class();

CI_Controllerを拡張すると、これが機能するはずです。

于 2012-12-21T08:34:33.920 に答える
3

ここで達成したいことのベストプラクティスはフックだとは思いません

次のことを試すことができます。認証チェックを行い、ユーザーを適切なコントローラーにリダイレクトするCI_Controllerの代わりに、拡張する中間コントローラーを作成する必要があります。

jondavidjohnによって作成されたこのチュートリアルをステップバイステップで読む

http://jondavidjohn.com/blog/2011/01/scalable-login-system-for-codeigniter-ion_auth

あなたは10分後にアイデアを得ることができるはずです

于 2012-12-21T04:48:09.240 に答える
0

コントローラーコンストラクターに認証を設定することはできませんか?アイテムがインスタンス化されたときに呼び出され、そこでチェックを行うことができます。また、いつでもCI_Controllerを拡張し、そこにロジックを配置して、そこでチェックインできるようにすることができます(そして、提案されているようにthis-> router-> fetch_class()を使用します)。

于 2012-12-21T08:45:35.407 に答える
0

拡張コントローラールートに行きたくなくて、そこにロジックが表示されている場合は、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];
于 2012-12-21T16:57:23.277 に答える
0

自動ロードライブラリクラスで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');
        } 
    }

}
于 2013-05-08T15:17:53.653 に答える