在cakephp 2x中更改密码

时间:2014-01-07 20:26:29

标签: php cakephp cakephp-2.1

我正在尝试创建一个简单的密码重置功能,允许管理员更改用户密码并通过电子邮件向他们发送新密码。一切正常,除了密码永远不会在数据库中实际更改。我发现了很多关于这个主题的信息,但没有任何效果。为什么密码没有改变?我正在使用Cakephp 2.1

我试过了:

public function auto_reset_password($id = null){
    $this->User->id = $id;
    $randomPass= $this->User->generatePassword();
    $randomPassHashed= $this->Auth->password($randomPass);
    $this->User->set('password', $randomPassHashed);
    $this->User->save();
    //email code....
}

代替:

$u = $this->User->find('first', array(
    'conditions' => array('User.id' => $id)
));
//.....
$u['User']['password'] = $randomPassHashed;

我的用户模式有这个之前保存:

public function beforeSave() {
    if (isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
    }
    return true;
}

1 个答案:

答案 0 :(得分:0)

需要注意的一些事项:

  • 在数据库中,“password”字段的名称应相同,否则将不会保存
  • $this->User->save()会在保存之前尝试验证您的数据。如果您已定义非空电子邮件或非空用户名等规则,则验证可能会失败。你真的需要看看保存回报的结果! (或者您可以禁用此$this->User->save( null, false )
  • 之类的验证
  • 使用saveField()代替:$this->User->saveField( 'password', $randomPassHashed );
  • 确保您不像原始问题那样进行双重散列。