我正在實現一個邏輯,您可以使用您的用戶名或電子郵件地址登錄到CakePHP。我在一本名爲CakePHP 1.3的應用程序開發指南(第1章:允許使用用戶名或電子郵件登錄)中的示例。本書解釋說,當Auth組件無法使用提供的信息登錄用戶時,它會返回到login()操作,並可以查找可能使用login()操作中的邏輯登錄用戶的其他信息。CakePHP:允許使用用戶名或電子郵件登錄
代碼/邏輯正在工作。但是,當我用我的電子郵件地址登錄時,它仍會顯示loginError消息,其中顯示「指定的帳戶無效」。在下面說「歡迎」,這是我登錄成功時顯示的消息。
這些都是想什麼,我知道:
這本書並不表示這是否是正常的,但我想了解如何忽略此錯誤消息,因爲它沒有意義。 THIS LINE在哪裏(在評論中)接受用戶?該行後面顯示錯誤消息。
..並可能顯示「您使用電子郵件登錄」。這是次要的。
下面是什麼,我認爲相關的代碼。請讓我知道你是否需要更多。
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');
}
}
}
你是說最後的else語句是不必要的(setFlash(...))?你能解釋一下你的回答嗎?在登錄視圖中更多地使用flash('auth')?順便說一句,如果我想引導用戶訪問除登錄頁面之外的頁面,重定向似乎是必要的。沒有它,我登錄,但我仍然在登錄頁面(無法告訴我成功登錄,沒有嘗試導航到其他受限制的頁面)。 – musicliftsme
請參閱http://book.cakephp.org/view/1250/Authentication它根據Auth中的設置自動重定向(否則,爲什麼您認爲您可以將login()保留爲默認設置?) –