2012-07-10 117 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');