[英]change password to set value in cakephp
我正在使用Cake 2.1.1,並嘗試編寫ajax函數來將用戶密碼重置為特定格式。 我已經能夠更改密碼,但是無法進行更改,因此新密碼實際上可以用於登錄用戶。
我的用戶控制器中具有此功能:
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;
}
如果運行此功能並檢查數據庫,可以看到password的值從字面上更改為“ name2014”,但無法使用該密碼登錄。
如果將密碼設置為$ passHashed並檢查數據庫,則會看到password的值已更改為哈希值,但是同樣,我無法使用新密碼登錄。
我的用戶表中還有一個“ salt”字段,該字段永不更改。
我猜測問題是鹽需要使用密碼哈希值進行更新才能正確地解密,但是我不確定如何更新鹽。 我可以在控制器中直接獲取它並直接設置值,還是可以通過AuthComponent以其他方式處理?
關於此主題的其他帖子似乎可以與我一直在使用的代碼配合使用,但是我也沒有發現任何嘗試直接設置密碼值的代碼。
使用beforeSave()
。 (不要在Controller中嘗試哈希路由)。
如果不是散列,則只需執行一些標准調試,然后找出為什么沒有進入代碼的這一部分:
debug($this->data);
exit;
if (isset($this->data['User']['password'])) {
// IT'S NOT GETTING HERE
//...
這是“答案”只是調試代碼的一種方法,因為很明顯,您可以在哪里僅通過查看數據和時間來確切地了解正在發生的事情以及原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.