我使用Cake 2.1.1並嘗試編寫ajax函數以將用戶密碼重置爲特定格式。我已經能夠更改密碼,但不能讓這個新密碼實際工作登錄用戶更改密碼在cakephp中設置值
我在我的用戶控制這個功能:
function ajax_reset_password(){
$this->autoRender=false;
$user = $this->User->find('first',array(
'conditions'=>array('User.email'=>$_GET['email'])
));
$this->User->id = $user['User']['id'];
$pass = $_GET['name'].'2014';
$passHashed= $this->Auth->password($pass);
$this->User->set('password', $pass);
$this->User->set('updated_at',date("Y-m-d H:i:s"));
$this->User->save();
//... code to email user new password
}
這是我的用戶控制器beforeSave:
public function beforeSave(){
if (isset($this->data['User']['password'])) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
}
return true;
}
如果我運行這個功能,並檢查我的數據庫,我可以看到密碼的值更改字面上「name2014」,但我不能與密碼登錄。
如果我將密碼設置爲$ passHashed並檢查數據庫,我發現密碼的值已更改爲散列值,但我再次無法使用新密碼進行登錄。
我的Users表中還有一個'salt'字段,永遠不會改變。
我猜測,問題是鹽需要用密碼哈希更新以正確解密它,但我不確定如何更新鹽。我可以在我的控制器中獲得它,並直接設置值,或者用AuthComponent以其他方式處理?
有關此主題的其他帖子似乎與我一直使用的代碼正常工作,但我也沒有發現任何試圖直接設置密碼值。
你爲什麼要哈希兩次?你應該讓模型層處理哈希,不需要額外的東西。另外,你可能想看看[這篇文章](http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/)。也許你喜歡乾淨的方式來存儲和更新密碼的DRY方法。 – mark
在ajax函數中的散列只是一個測試。似乎beforeSave從未運行,因爲密碼不會被散列,如果我不在ajax函數中執行它 – Cbas