在cakephp中没有更新哈希密码

时间:2015-05-28 13:20:23

标签: cakephp cakephp-2.6

我正在尝试使用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);   

然后密码更新正常但没有哈希。可能有人帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

将您的代码更新为:

   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)
        );      
    }

<强>更改

  1. $_POST[]不是在cakephp中获取表单数据的正确方法。
  2. 无需将变量包含在双引号(")中。

答案 1 :(得分:0)

此处无需使用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(),则需要谨慎使用,因为它不会逃避传递的字段。来自the docs: -

  

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