如何使用BlowfishPasswordHasher更改CakePHP控制器中的密码?

时间:2015-05-20 04:22:38

标签: php cakephp

作为标题,无论如何我在CakePHP的Controller中使用BlowFishPasswordHasher而不是Model(我只是使用saveField来保存用户的新密码)?

2 个答案:

答案 0 :(得分:0)

您应该在模型中处理更改密码,因为很可能您也使用beforeSave()来修改密码;

通过自定义验证执行此操作将是最好的方法,因为您可以使用正确的流来检查旧密码是否与用户提供的密码匹配。如果是,则返回true,允许使用beforeSave()对新密码进行哈希处理。

例如:

模型beforeSave()

public function beforeSave($options = array()) {

  if (isset($this->data[$this->alias]['password']) && !empty($this->data[$this->alias]['password']) && strlen($this->data[$this->alias]['password']) > 0) {

    $passwordhash = new BlowfishPasswordHasher();
    $this->data[$this->alias]['password'] = $passwordhash->hash($this->data[$this->alias]['password']);

  } 

  return parent::beforeSave();

}

使用自定义验证方法,如:

自定义验证

public function oldPassword($password) {

  $user = $this->find('first', array('conditions' => array('username' => $this->data[$this->alias]['username'])));

  $passwordhash = Security::hash($password['oldPassword'], 'blowfish', $user[$this->alias]['password']);

  if ($passwordhash === $user[$this->alias]['password']) {

    return true;

  } else {

    return false;

  }

}

使用上面的内容,您可以在允许表单提交之前使用CakePHP验证来检查旧密码。如果旧密码与DB中的旧密码匹配,则返回true以允许表单保存,并调用beforeSave来哈希新密码。

答案 1 :(得分:0)

这里使用$ _POST来获取字段

public function changepassword() {

        if ($this->request->is('post') )
        {
            $pass_stored=0;
            $current_pass= $_POST['new_password'];


           $passwordHasher = new BlowfishPasswordHasher();
                $newHash = $passwordHasher->hash($current_pass);
          $uid= $_POST['uid'];


            $this->User->query("UPDATE users SET password = '".$newHash."' WHERE id = '".$uid."' ");
            $this->Session->setFlash(__('Password Saved Sucessfully'), 'success');
            $this->redirect(array('action' => 'login'));    
        }
        else
        {
            $this->set('resettoken', $_REQUEST['id']);  
        }
    }