2012-04-05 32 views
2

我是cakePHP的新手,我已閱讀他們的文檔,我正在關注他們的簡單身份驗證示例。我也搜索了很多(包括本網站上的答案)以解答我的問題。

我使用CakePHP 2.0和我UsersController的登錄功能如下:

function login() { 
    if ($this->request->is('post')) { 
     if ($this->Auth->login(/*$this->request->data*/)) { 
      $this->redirect($this->Auth->redirect()); 
     }else { 
      $this->Session->setFlash(__('Invalid username or password, try again')); 
     } 
    } 
} 

我AppController的是這樣的:

public $components = array(
        'Session', 
        'Auth' => array(
          'loginRedirect' => array('controller' => 'pages', 'action' => 'display'), 
          'logoutRedirect' => array('controller' => 'pages', 'action' => 'display') 
        ) 
     ); 

public function beforeFilter() { 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
} 

我的用戶模型:

class User extends AppModel { 

public $name = "User"; 

} 

登錄表單:

echo $this->Session->flash('auth'); 
echo $this->Form->create('User', array('action' => 'login')); 
echo $this->Form->input('username'); 
echo $this->Form->input('password'); 
echo $this->Form->end('Login'); 

問題是它不會記錄用戶。當$ this-> Auth-> login()被調用時沒有$ this-> request-> data作爲參數,會話中沒有寫入任何內容。頁面只是刷新。但是,當您提供$ this-> request->數據時,會將憑證寫入會話並正確重定向。但是我注意到,即使它們不存在於數據庫中,您也可以使用$ this-> Auth-> login($ this-> request-> data)'登錄'任何人。除此之外,如果我輸入錯誤憑證,則不會顯示任何消息。

我沒有試圖做任何特別的事情,我只想要記錄用戶的能力。我有一個簡單的用戶名錶和用戶名和密碼字段,我已經按照他們的例子閱讀他們的文檔,但仍然沒有我已經嘗試過的工作。

如果我沒有提供提供答覆所需的全部信息,我表示歉意。任何幫助是極大的讚賞。

+0

小心:您必須不惜一切代價留下登錄()。如果您將$ this-> request-> data傳遞給它,它將記錄此用戶,而不管用戶名和密碼是什麼。這會危及您的登錄。嘗試調試查找哈希密碼的內容,並將其與數據庫中的當前哈希字符串進行比較。最有可能他們不匹配! – mark 2012-04-05 11:24:41

回答

0

你在哪裏定義了要使用的引擎? 可能與http://ask.cakephp.org/questions/view/unable_to_login 相同的問題,已經解決了文檔中描述的設置引擎/適配器的問題。

+0

我認爲Form是默認值,因爲我通過在數據庫中定義用戶名和密碼字段來使用命名約定,Cake會自動嘗試根據這些字段中的值對用戶進行身份驗證。 :/ – 2012-04-05 10:30:34

+0

沒有,沒有工作。 :/ – 2012-04-05 10:43:55

+0

這可能是PUT嗎?而不是POST?究竟發生了什麼「沒有工作」,並沒有多說這個問題。 – mark 2012-04-05 14:13:38

5

我有完全相同的經歷。發生在我身上的事情是,有一次,我能夠使用某些用戶名和密碼成功登錄,但我從未在視圖中看到任何代碼,顯示我已登錄。我也很困惑,當我隨後登錄與隨機用戶名和密碼,它仍然給了我一個成功的登錄通知。

我認爲發生的事情是,如果您處於登錄狀態,那麼$this->Auth->login()將返回true,無論您輸入什麼用戶名和密碼。該解決方案可能會以某種方式在您的程序中調用$this->Auth->logout(),或者清空您的cookie,以便程序不再指定您已經登錄。然後$this->Auth->login()將再次正常工作。