2011-05-06 8 views
0

我已經建立了使用CakePHP一個非常簡單的登錄系統,但現在我有一些問題:CakePHP的登錄幫助

1)如何顯示setFlash消息,當用戶登錄?我嘗試在登錄方法中添加一個,但是當訪問登錄頁面時它會一直顯示它,並且在成功登錄時不顯示它?但使用註銷方法?

2.)當用戶登錄時,由於loginRedirect他們總是被帶到主頁,但是如何將它們發送到他們當前所在的頁面?由於登錄表單位於公共頁面的標題中,所以當他們登錄時,我希望它們被髮回到同一頁面。

這是目前在我app_controller.php代碼我已經到位

var $components = array('Auth','Session'); 

function beforeFilter() 
{ 
    $this->Auth->authorize = 'actions'; 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index'); 
    $this->Auth->logoutRedirect = array('controller' => 'home', 'action' => 'index'); 

} 

,這裏是我的users_controller.php中

/** 
* Log in 
*/ 

function login() 
{ 

    $this->Session->setFlash('You\'re now logged in'); 

    $this->layout = 'login'; 

    $this->set('title_for_layout', 'Log in'); 

} 

/** 
* Log out 
*/ 

function logout() 
{ 

    $this->Session->setFlash('<div class="content"><h2>Pow</h2><p>Moo</p></div>'); 

    $this->redirect($this->Auth->logout()); 

} 

這裏是登錄形式,是在每個公共頁面的標題(注意,我也有一個專用的登錄頁面,並且包含相同的表單):

<?php echo $this->Form->create('User', array('id' => 'loginform', 'type' => 'post', 
     'url' => array('controller' => 'users', 'action' => 'login'))); ?> 

<fieldset id="login"> 

    <ul class="clearfix"> 
     <li id="li-username"> 
      <?php echo $this->Form->input('username', array('label'=>false,'placeholder'=>'Username or email address')); ?> 
     </li> 
     <li id="li-password"> 
      <?php echo $this->Form->input('password', array('type'=>'password','label'=>false,'placeholder'=>'Password')); ?> 
      <span id="iforgot"><?php echo $this->Html->link('?', 
      array('controller' => 'users', 'action' => 'forgotpassword'), array('title' => 'Forgot your password?')); ?></span> 
     </li> 
     <li id="li-submit"> 
      <button type="submit" title="Log in">Log in &#9658;</button> 
     </li> 
    </ul> 

</fieldset> 

<?php echo $this->Form->end(); ?> 
+0

你不能在登錄方法上設置'flashdata',然後重定向到說'dashboard',它只顯示一次flashdata? – Ross 2011-05-06 13:57:23

+0

那麼重定向目前是自動完成的,但是如何顯示setFlash消息來表明你現在已經登錄並歡迎回來! – Cameron 2011-05-06 14:54:56

回答

0

這裏有一個片段從我的登錄方法之一 -

function login() { 
    // check it's a valid user 
    $this->Session->setFlash('You have successfully logged in'); 
    $this->redirect(array('controller'=>'dashboard','action'=>'index')); 
} 

我的儀表盤控制器使用的模板與:它

<?php echo $this->Session->flash(); ?>

在支持(我相信)你問到底是什麼在#1

至於#2,您可能必須使用$this->redirect($this->referer());一些運氣。有關更多信息,請參閱Take user back to previous page after logging in?

如果你不想自動重定向,你可以使用在beforeFilter

+0

問題是,如果我訪問'domain.com/login',那麼我會直接得到閃光燈,因爲我打電話的方法,並顯示該方法的閃光燈沒有任何檢查登錄,但在你的情況下,我不能甚至可以訪問登錄頁面,因爲我正被重定向到家中! – Cameron 2011-05-06 15:21:51

0

蛋糕的登錄組件

$this->Auth->autoRedirect = false;是從來沒有「簡單」 u_U

1)我有同樣的問題。 。setFlash將在下一頁顯示消息..並且似乎該消息在Auth組件所做的某些重定向中丟失。

嘗試@Ross方法,但如果不工作,你可能想overwrite the AuthComponent,並添加setFlash()的登錄方法對自己的AuthComponent ..這樣的事情:

class MyAuthComponent extends AuthComponent { 
    function login($data = null,$public = false) { 
     $this->Session->setFlash('WELCOME!'); 
     parent::login($data,$public); 
    } 
} 

2)我會複製類API說怎麼樣重定向

在loginAction混合 網址(定義爲字符串或數組) 到處理控制器動作登錄。

LoginRedirect混合 通常情況下,如果用戶被重定向到 在$在loginAction頁面,它們從將被保存在session 進行重定向,使他們能夠 成功 登錄後重定向的位置 。如果此會話值不是 ,則該用戶將被重定向到 在$ loginRedirect中指定的頁面。

基本上,Auth組件會讀取會話尋找$_SESSION['Auth']['redirect']值,如果沒有找到,它將使用LoginRedirect屬性。由於您在標題上使用登錄頁面,所以一個簡單的解決方法是始終將$_SESSION['Auth']['redirect']添加到appController中的當前頁面。您可以使用$this->here獲取當前頁面..也許有另一種方式..但我還沒有發現任何東西在蛋糕的文檔

祝你好運!