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

如何使用BlowfishPasswordHasher在CakePHP控制器中更改密码?,php,cakephp,Php,Cakephp,作为标题,我是否在CakePHP的控制器中使用BlowFishPasswordHasher而不是Model(我只是使用saveField来保存用户的新密码)?您应该在模型中处理密码的更改,因为您很可能也在这里使用beforeSave()对密码进行哈希处理 通过自定义验证执行此操作是最好的方法,因为您可以使用正确的流来检查旧密码是否与用户提供的密码匹配。如果返回true,则允许使用beforeSave()散列新密码 例如: 保存之前的模型() 使用自定义验证方法,如: 自定义验证 public f

作为标题,我是否在CakePHP的控制器中使用BlowFishPasswordHasher而不是Model(我只是使用saveField来保存用户的新密码)?

您应该在模型中处理密码的更改,因为您很可能也在这里使用beforeSave()对密码进行哈希处理

通过自定义验证执行此操作是最好的方法,因为您可以使用正确的流来检查旧密码是否与用户提供的密码匹配。如果返回true,则允许使用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验证在允许表单提交之前检查旧密码。如果旧密码与数据库中的旧密码匹配,则返回true以允许保存表单,并调用beforeSave以散列新密码

我在这里使用$\u 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']);  
        }
    }

您可以在控制器$oldpwd='123456'中尝试此功能$pass=Security::hash($oldpwd,'blowfish',true);您应该经常提到您正在使用的cakephp版本。使用2.x和shim插件,您可以使用3.x中的Factory backport加载哈希器:为什么要将其移动到控制器中?我说不通&
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']);  
        }
    }