2012-07-10 116 views
3

我想根据用户是否登录来向用户显示不同的导航栏。我已经处理注册和登录阶段,但无法检查用户是否已登录并显示正确的导航栏。检查用户是否使用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); 
    } 
} 

,然后在我的布局(未查看):

<?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永远是假的。如果在我的单独控制器中使用$this->set('loggedIn', $this->loggedIn);,它可以正常工作,但为了保持我的代码干爽,我只希望在控制器中保留所有其他控制器继承的(AppController)。

有没有简单的方法来做到这一点,我失踪了?

+0

你不应该传递变量到视图中beforeFilter - 使用beforeRender代替 – mark 2012-07-10 21:49:41

回答

6

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

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

public function beforeFilter() { 
    $this->set('loggedIn', $this->Auth->loggedIn()); 
} 
+5

$ this-> Auth-> loggedIn()has been在cakephp3中删除。在cakephp3中,您必须检查$ this-> Auth-> user('id')。如果用户尚未登录,则返回NULL! – Dashrath 2015-07-05 14:32:55

6

尝试使用:

if ($this->Auth->loggedIn()) { 
+0

这工作,谢谢。 – 2012-07-10 22:13:07

+1

没问题。以下是此方法的链接:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#AuthComponent::loggedIn – Hoff 2012-07-11 02:16:19

1

只是把这个代码登录后()动作:

if($this->Auth->loggedIn()){ 
     $this->redirect(array('action' => 'index')); 
    } 
1

对于cakephp3宽

控制器:

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

模板,你可以检查会话对象

$user = $this->request->session()->read('Auth.User');