2011-11-28 58 views
3

我的观点更新密码。我如何才能更新密码哈希如果已填写新密码只有字段填写

谢谢。

编辑:$ data ['User'] ['password']总是一个散列,永远不会是空的!

+0

其中散列发生?它是由蛋糕完成的? – api55

回答

3

CakePHP 1.3自动对password字段进行散列。 CakePHP 2.0没有。

你有几个选项(从最差到最好,在我看来):

  1. 重命名你的领域和节能

    if ($data['User']['new_password'] != '') { 
        $data['User']['password'] = $this->Auth->password($data['User']['new_password']); 
    } 
    
  2. 哈希字符串中的平等检查之前将其交换

    if ($data['User']['password'] == $this->Auth->password('')) { 
        unset($data['User']['password']); 
    } 
    
  3. 更改散列函数来一个不凑空PAS剑[见book进行配置]:

    function hashPasswords($data) { 
        if (!empty($this->data['User']['password'])) { 
         $this->data['User']['password'] = $this->Auth->password($this->data['User']['password']); 
        } 
        return $data; 
    } 
    
+0

+1,非常有帮助。虽然我确实想在数据库中散列我的密码。我的问题是,当我用空白密码字段保存用户配置文件(因为我不想更改密码)时,它将数据库中的密码更改为散列值为空的值。我只想让密码一直保留,除非我在表单域中输入somethign。谢谢。 – 472084

+0

编辑,我设法使用你的答案组合完美地工作,谢谢! – 472084

+0

更新回答:现在,所有三种方法现在在密码进入数据库之前对密码进行哈希处理(我对第一个密码进行了疏漏,并简化了第三个密码)。真高兴你做到了! – deizel

3

如果密码字段为空,则取消设置。

else { 
     if(empty($data['User']['password'])) 
     { 
      unset($data['User']['password']); 
     } 
     if ($this->User->save($data)) { 
      $this->Session->setFlash('The user details have been updated.'); 
      $this->redirect(array('action' => 'index')); 
     } 
} 
+0

但是'$ this-> data ['User'] ['password']'是空值的散列,所以它永远不会是空的? – 472084

1

您可以从$data

function edit($id = null) { 

    $this->User->id = $id; 

    $data = $this->data; 

    if (empty($data)) { 
     $this->data = $this->User->read(); 
    } else { 
     if($data['User']['password'] == ''){ 
      unset($data['User']['password']); 
     } 
     if ($this->User->save($data)) { 
      $this->Session->setFlash('The user details have been updated.'); 
      $this->redirect(array('action' => 'index')); 
     } 
    } 
} 
+0

但是'$ this-> data ['User'] ['password']'是空白值的散列,所以它永远不等于''? – 472084

0

你可以尝试只更新特定字段unset变量的基础上,中频情况:

 if(empty($data['User']['password'])) 
     { 
      $this->User->id = $user_i; // specify which User to update 
      //update only username 
      $this->User->save(array('User'=>array('User.username'=>$data['User']['username']))); 
     } 
     else{ 
      //save as before 
     }