2013-05-09 47 views
0

對於使用「username」和「password」的用戶,我有一個mongo db結構。我正嘗試在cakephp登錄中使用Auth,但它似乎不適合我。我嘗試刪除$ this->數據,但仍然無效。如何在使用mongodb的cakephp中使用Auth

我的密碼是使用安全哈希::散列($這個 - >數據[ '用戶'] [ '密碼'])

if(!empty($this->data)) 
{ 
    if($this->Auth->login($this->data)) 
    { 
     echo "yes"; 
    } 
    else{ 
     echo "no"; 
    } 
} 

在我的應用程序控制器我有這樣的:

public $components = array('DebugKit.Toolbar', 'Session', 'Auth' => array(
    'loginAction' => array(
     'controller' => 'pages', 
     'action' => 'home' 
    ), 
    'authenticate' => array(
     'Form' => array(
      'fields' => array('username' => 'username', 'password' => 'password') 
     ) 
    ) 
)); 

下面是結果,當我調試的登錄方法:

array(
    'User' => array(
     'password' => '*****', 
     'username' => '[email protected]', 
     'remember' => '0', 
     'auto_login' => '0' 
) 
) 

我不知道爲什麼我不能用MongoDB的使用驗證。我在這裏先向您的幫助表示感謝。

編輯:

,當我試圖把眼前的佈局,它顯示我在頁面說法底部的查詢:

db.users.find({"username":"[email protected]","password":"2fdf49ffc396453960802df8fc2417655d1e8fca"}, []).sort([]).limit(1).skip(0) 

,我從所輸入的密碼的哈希值。表單與正在查詢的散列值不同。散列值應該是「a2374c309ab7823dcd9b4e21dae7511f7a9c7ec5」。爲什麼cakephp將密碼轉換爲另一個散列值?

+0

您正在使用哪個版本的CakePHP? – 2013-05-09 16:08:52

+0

即時通訊使用Cake 2.3.3 – comebal 2013-05-09 16:11:14

+0

在這種情況下,您應該使用'$ this-> request-> data'而不是'$ this-> data'。 – 2013-05-09 16:14:09

回答

1

有兩種使用$this->Auth->login()的方法。 CakePHP API documentation對此進行了說明:

如果提供$用戶,數據將作爲登錄用戶存儲。如果$ user爲空或未指定,則該請求將用於識別用戶。

manual還提到:

在2.0 $這個 - > Auth->登錄($這個 - >請求 - >數據)會記錄用戶在任何數據被公佈......

所以對於用戶控制器的登錄方法,你不應該通過什麼:

if($this->Auth->login()) { 
    // user is now logged in 
} 

如果您需要手動登錄用戶可以通過用戶數據作爲數組:

if($this->Auth->login($this->request->data['User'])) { 
    // user is now logged in 
} 

哪裏$this->request->data['User']是一樣的東西:

array(
    'id' => 1, 
    'username' => 'admin', 
    'password' => '1234', 
); 

注:在你不需要哈希兩種情況密碼是自動完成的。

+0

嗨@xgalvin謝謝你的回覆。這是我的問題,如果我在$ this-> Auth-> login()中添加一個參數,我總是會得到「是」,但如果我不添加參數,我總是會得到一個否。 – comebal 2013-05-09 16:55:12

+0

當您傳遞參數時,您正在強制登錄。如果登錄失敗,則不是由於身份驗證錯誤。你在檢查'$ this-> Session-> flash('auth');'在你看來的某個地方? – 2013-05-09 16:59:46

+0

嗨@xgalvin,我更新了我的問題。 Cake正在將我的密碼轉換爲不同類型的哈希,這就是爲什麼它不進行身份驗證。你能告訴我爲什麼這樣嗎?謝謝 – comebal 2013-05-09 17:14:19

1

我能找出答案。因爲cakephp在數據庫中搜索時會自動散列密碼。

我有是在我節省了用戶的密碼,我用

Security::hash($this->data['User']['password']) 

我應該用這一個,而不是問題:

AuthComponent::password($this->data['User']['password']) 

謝謝所有的尤其是幫助@xgalvin