通过单独的模型方法间接保存的 Blowfish 密码不起作用
Blowfish passwords indirectly saved through a separate Model method do not work
以下确实有效:
// app/Controller/UsersController.php
$this->User->save(array('pwd'=>$new_pwd),false);
以下不起作用:
// app/Controller/UsersController.php
$this->User->setPassword($new_pwd);
User
模型有有效的 beforeSave()
和无效的自定义方法 setPassword()
:
// app/Model/User.php
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['pwd'])&&!empty($this->data[$this->alias]['pwd'])) {
$new_password = $this->data[$this->alias]['pwd'];
$passwordHasher = new BlowfishPasswordHasher();
$this->data[$this->alias]['pwd'] = $passwordHasher->hash($new_password);
}
return true;
}
public function setPassword($new_password) {
$passwordHasher = new BlowfishPasswordHasher();
$result = $this->save(array(
'pwd' => $passwordHasher->hash($new_password),
), false);
return $result;
}
所以 setPassword()
或多或少是相同的,但每当我尝试使用以这种方式保存的密码登录时,$this->Auth->login()
returns 错误。不过,我可以在数据库中看到更新的密码哈希。
我错过了什么吗?请帮忙
setPassword()
在内部也通过 save()
调用 beforeSave()
。
很明显你对它进行了两次哈希处理,使其无法再使用。
以下确实有效:
// app/Controller/UsersController.php
$this->User->save(array('pwd'=>$new_pwd),false);
以下不起作用:
// app/Controller/UsersController.php
$this->User->setPassword($new_pwd);
User
模型有有效的 beforeSave()
和无效的自定义方法 setPassword()
:
// app/Model/User.php
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['pwd'])&&!empty($this->data[$this->alias]['pwd'])) {
$new_password = $this->data[$this->alias]['pwd'];
$passwordHasher = new BlowfishPasswordHasher();
$this->data[$this->alias]['pwd'] = $passwordHasher->hash($new_password);
}
return true;
}
public function setPassword($new_password) {
$passwordHasher = new BlowfishPasswordHasher();
$result = $this->save(array(
'pwd' => $passwordHasher->hash($new_password),
), false);
return $result;
}
所以 setPassword()
或多或少是相同的,但每当我尝试使用以这种方式保存的密码登录时,$this->Auth->login()
returns 错误。不过,我可以在数据库中看到更新的密码哈希。
我错过了什么吗?请帮忙
setPassword()
在内部也通过 save()
调用 beforeSave()
。
很明显你对它进行了两次哈希处理,使其无法再使用。