2011-11-02 178 views
3

我正在實現一個邏輯,您可以使用您的用戶名或電子郵件地址登錄到CakePHP。我在一本名爲CakePHP 1.3的應用程序開發指南(第1章:允許使用用戶名或電子郵件登錄)中的示例。本書解釋說,當Auth組件無法使用提供的信息登錄用戶時,它會返回到login()操作,並可以查找可能使用login()操作中的邏輯登錄用戶的其他信息。CakePHP:允許使用用戶名或電子郵件登錄

代碼/邏輯正在工作。但是,當我用我的電子郵件地址登錄時,它仍會顯示loginError消息,其中顯示「指定的帳戶無效」。在下面說「歡迎」,這是我登錄成功時顯示的消息。

這些都是想什麼,我知道:

  1. 這本書並不表示這是否是正常的,但我想了解如何忽略此錯誤消息,因爲它沒有意義。 THIS LINE在哪裏(在評論中)接受用戶?該行後面顯示錯誤消息。

  2. ..並可能顯示「您使用電子郵件登錄」。這是次要的。

下面是什麼,我認爲相關的代碼。請讓我知道你是否需要更多。

class AppController extends Controller { 
public $components = array(
    'Auth' => array(
     'authorize' => 'controller', 
     'loginRedirect' => array(
      'admin' => false, 
      'controller' => 'users', 
      'action' => 'dashboard' 
     ), 
     'loginError' => 'Invalid account specified', 
     'authError' => 'You don\'t have the right permission' 
    ), 
    'Session' 
); 
} 


class UsersController extends AppController { 
public function login() { 
    if (
     !empty($this->data) && 
     !empty($this->Auth->data['User']['username']) && 
     !empty($this->Auth->data['User']['password']) 
    ) { 
     $user = $this->User->find('first', array(
      'conditions' => array(
       'User.email' => $this->Auth->data['User']['username'], 
       'User.password' => $this->Auth->data['User']['password'] 
      ), 
      'recursive' => -1 
     )); 

     if (!empty($user) && $this->Auth->login($user)) { // $this->Auth->login() true if logs in 
      if ($this->Auth->autoRedirect) { // I think autoRedirect is TRUE by default 

       $this->redirect($this->Auth->redirect()); // <<THIS LINE>> 
      } 
     } else { 
      $this->Session->setFlash($this->Auth->loginError, $this->Auth->flashElement, array(), 'auth'); 
     }   
    } 
} 

回答

1
if (!empty($user) && $this->Auth->login($user)) { 
     $this->Session->delete('Message.auth'); 
    } 

你並不需要爲setFlash如果authError您在登錄觀看Flash(「權威性」)(如食譜),你不需要呼叫重定向。

+0

你是說最後的else語句是不必要的(setFlash(...))?你能解釋一下你的回答嗎?在登錄視圖中更多地使用flash('auth')?順便說一句,如果我想引導用戶訪問除登錄頁面之外的頁面,重定向似乎是必要的。沒有它,我登錄,但我仍然在登錄頁面(無法告訴我成功登錄,沒有嘗試導航到其他受限制的頁面)。 – musicliftsme

+0

請參閱http://book.cakephp.org/view/1250/Authentication它根據Auth中的設置自動重定向(否則,爲什麼您認爲您可以將login()保留爲默認設置?) –

0

其相同的代碼在http://www.packtpub.com/cakephp-1-3-application-development-cookbook/book CakePHP的1.3應用程序開發解釋食譜 , 我認爲這將是更有效的這樣

if(!empty($user) && $this->Auth->login($user)){ 
       if($this->Auth->autoRedirect){ 
        $this->Session->delete('Message.auth'); // kills login failed message after successful login 
        $this->redirect($this->Auth->redirect()); 
       } else { 
        $this->Session->setFlash($this->Auth->loginError, $this->Auth->flashElement, array(), 'auth'); 
       } 
      } 

這種方式登錄失敗錯誤消息後登錄成功將被省略和重定向會保持不變。

相關問題