4

ログインしているかどうかに基づいて、ユーザーに異なるナビゲーション バーを表示したいと考えています。登録とログインの段階を処理しましたが、ユーザーがログインしているかどうかを確認し、正しいナビゲーション バーを表示するのに問題があります。

これは私が持っているものですAppController.php:

public $components = array('Session', 'Auth' => array(
    'loginRedirect' => array('controller' => 'users', 'action' => 'account'),
    'logoutRedirect' => array('controller' => 'pages', 'action' => 'home')
));

public $loggedIn = false;

public function beforeFilter() {
    $this->Auth->allow('home', 'register', 'login');
    if ($this->Auth->user('id')) {
        $this->set('loggedIn', true);
    }
}

そして私のレイアウト(ビューではない)で:

<?php if ($loggedIn): ?>
    logged in
<?php else: ?>
    <li class="right"><a href="/register">Register</a></li>
    <li class="right"><a href="/login">Login</a></li>
<?php endif; ?>

ただし、$loggedIn常に false です。個々のコントローラー内から実行すると正常$this->set('loggedIn', $this->loggedIn);に動作しますが、コードを DRY に保つために、他のすべてのコントローラーが継承するコントローラーにのみ必要です ( AppController)。

私が見逃しているこれを行う簡単な方法はありますか?

4

4 に答える 4

7

これはすでに回答されていることは知っていますが、とにかく調査結果を投稿します..

この問題を解決して $loggedIn をグローバルに利用できるようにした方法は、それを beforeFilter() の AppController.php ファイルに追加することでした。

public function beforeFilter() {
    $this->set('loggedIn', $this->Auth->loggedIn());
}
于 2013-05-31T00:35:53.403 に答える
2

Cakephp3 の場合

コントローラ全体:

public function beforeFilter(Event $event) {
    $this->set('login_status', $this->Auth->user('id'));
}

テンプレートでは、セッションオブジェクトを確認できます

$user = $this->request->session()->read('Auth.User');
于 2016-01-19T14:05:57.847 に答える
1

このコードを login() アクションの後に置くだけです。

if($this->Auth->loggedIn()){
        $this->redirect(array('action' => 'index'));
    }
于 2013-04-17T16:56:37.210 に答える