【发布时间】:2014-10-08 07:34:09
【问题描述】:
对不起,请问,更改密码忘记密码时,如果我的 beforeSave 函数是这样的,新密码不会存储在数据库中:
public function beforeSave($options = array()) {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey]) && isset($this->data[$this->alias]['password'])) { $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); } else {
unset($this->data[$this->alias]['password']);
}return true;}
但是如果 BeforeSave 的功能变成这样
public function beforeSave($options = array()) { $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);}}
新密码的值是成功保存到数据库,但是当用户做编辑功能和密码留空时,数据库中的密码有两次散列 请帮助我,谢谢之前
哦,是的,这是我的 changePassword 功能:
public function account(){
if(!$this->Session->check('Auth.User')){
$this->Session->setFlash(__('You must be logged in to view this page.'));
return $this->redirect(array('action' => 'login'));
}
//set user's ID in model which is needed for validation
$this->User->id = $this->Auth->user('id');
//load the user (avoid populating $this->data)
$current_user = $this->User->findById($this->User->id);
$this->set('current_user', $current_user);
$this->User->useValidationRules('ChangePassword');
$this->User->validate['re_password']['compare']['rule'] = array('equalToField', 'password', false);
$this->User->set($this->data);
if(!empty($this->data) && $this->User->validates()){
$password = $this->data['User']['password'];
$this->User->saveField('password', $password);
$this->Session->setFlash('Your password has been updated');
$this->redirect(array('action' => 'account'));
}
$this->layout = 'dashboard_admin';
}
【问题讨论】:
-
为什么你还要在编辑中保存密码。只需在编辑时取消设置密码即可。
-
我已经尝试在编辑功能中取消设置密码但仍然不起作用,你能举个例子吗?
-
This article 可能会提供更多关于最佳实践的见解,并且还展示了针对此问题的行为驱动方法。
-
总是提到 CakePHP 版本。我猜你使用的是 Cakephp 1.3。如果是,那么下面的两个答案都不起作用..
-
@FazalRasel 我正在使用 cakephp 2.5.4
标签: cakephp cakephp-2.0 edit change-password before-save