在cakephp中未更新哈希密码后

在cakephp中未更新哈希密码后,cakephp,cakephp-2.6,Cakephp,Cakephp 2.6,我试图通过使用ajax来更改密码选项。在这里,我在控制器中尝试了以下代码 if ($this->request->is(array('post', 'put'))){ $id=$this->Auth->user('id'); $changePass=$_POST['cpass']; $cpasss=AuthComponent::password($changePass);

我试图通过使用ajax来更改密码选项。在这里,我在控制器中尝试了以下代码

       if ($this->request->is(array('post', 'put'))){
            $id=$this->Auth->user('id'); 
            $changePass=$_POST['cpass'];
                $cpasss=AuthComponent::password($changePass);
                echo $cpasss;
                $up=$this->User->updateAll(
                array('User.password'=>"$cpasss"),
                array('User.id'=>"$id")
            );      
        }
这里的散列运行良好,我已经看到了firebug,但问题是这里的密码没有在数据库中更新。如果我删除

$cpasss=AuthComponent::password($changePass);   
密码正在更新,但没有散列。有人能帮我解决这个问题吗?

将您的代码更新到:

   if ($this->request->is(array('post', 'put'))){
        $id=$this->Auth->user('id'); 
        $changePass= $this->request->data['cpass'];
            $cpasss=AuthComponent::password($changePass);

            $up=$this->User->updateAll(
            array('User.password'=> $cpasss),
            array('User.id'=> $id)
        );      
    }
变化:

$\u POST[]不是cakephp中获取表单数据的正确方法。 不需要在双引号中包含变量。 这里不需要使用updateAll。相反,只需使用save保存数据,并记住将主键与保存数据一起传递:-

if ($this->request->is(array('post', 'put'))) {
    $id = $this->Auth->user('id');
    $changePass = $this->request->data['User']['cpass'];

    $data = array(
        'id' => $id,
        'password' => AuthComponent::password($changePass)
    );
    $this->User->save($data);
}
如果确实使用updateAll,则需要谨慎使用,因为它不会转义传递的字段。发件人:-

$fields数组接受SQL表达式。文字值应为 使用DboSource::value手动引用