2011-05-10 84 views
0

我在我的登錄方法中有以下代碼將用戶重定向到他們的上一頁,並向他們顯示一條消息說歡迎回來。我禁用了autoRedirect來給我控制,這樣我就可以在登錄時顯示一條flash消息並執行其他操作。CakePHP登錄重定向錯誤

if(!(empty($this->data)) && $this->Auth->user()) 
    { 
     $this->Session->setFlash('Welcome back! <strong>' . $this->User->field('firstname') . '</strong>', 'flash'); 

     $this->redirect($this->Auth->redirect($this->referer())); 
    } 

這種使用是在頭登錄表單的時候,但是從實際獨立的登錄頁面,在登錄時用戶返回到登錄頁面重定向,並顯示一個錯誤,說自己的用戶名和密碼工作正常是不正確的,也是歡迎回來的消息。用戶IS已登錄,但可以訪問相關頁面,但我不希望他們重定向回登錄頁面。我該如何解決?

回答

0

您可以檢查引用者是否是登錄頁面,如果是,則將其重定向到主頁面。

編輯添加的代碼示例:

if($this->referer()=='/users/login'){ 
    $this->redirect('/'); 
}else{ 
    $this->redirect($this->Auth->redirect($this->referer())); 
} 
+0

如何做到這一點嗎? – Cameron 2011-05-10 13:34:19

+0

我爲響應添加了一個代碼片段。 – 2011-05-10 14:10:59

+0

是否有可能檢查它們是否來自登錄方法而不是URL,因爲URL是通過路由更改的,並且在localhost上運行,因此不是root,所以'/'不起作用! – Cameron 2011-05-10 14:24:58

0
if(!(empty($this->data)) && $this->Auth->user()) 
     { 
      $this->Session->setFlash('Welcome back! <strong>' . $this->User->field('firstname') . '</strong>', 'flash'); 

      //$this->redirect($this->Auth->redirect($this->referer())); 

      if($this->referer(array('controller' => 'users', 'action' => 'login'))) 
      { 
       $this->redirect(array('controller' => 'home', 'action' => 'index')); 
      } 
      else 
      { 
       $this->redirect($this->Auth->redirect($this->referer())); 
      } 
     }