检查用户是否使用CakePHP登录

Jam*_*son 4 php cakephp

我想根据用户是否登录显示不同的导航栏.我已经处理了注册和登录阶段,但无法检查用户是否已登录并显示正确的导航栏.

这就是我所拥有的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的布局(不是视图):

<?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; ?>
Run Code Online (Sandbox Code Playgroud)

但是,$loggedIn总是假的.如果$this->set('loggedIn', $this->loggedIn);从我的各个控制器中做到它工作正常,但是为了保持我的代码DRY我只想在控制器中我所有其他控制器继承自(AppController).

是否有一种简单的方法可以做到这一点,我错过了?

Hof*_*off 7

尝试使用:

if ($this->Auth->loggedIn()) {
Run Code Online (Sandbox Code Playgroud)


小智 7

我知道这已经得到了回答,但无论如何我都会发表我的发现.

我解决这个问题并使$ loggedIn全局可用的方法是将它添加到beforeFilter()中的AppController.php文件中

public function beforeFilter() {
    $this->set('loggedIn', $this->Auth->loggedIn());
}
Run Code Online (Sandbox Code Playgroud)

  • 在cakephp3中删除了$ this-> Auth-> loggedIn().在cakephp3中你必须检查$ this-> Auth-> user('id').如果用户尚未登录,则返回NULL! (6认同)