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