通过单独的Model方法间接保存的Blowfish密码不起作用

时间:2015-12-26 22:46:46

标签: cakephp cakephp-2.0 blowfish cakephp-2.7

以下工作正常:

// 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()都会返回false。我可以看到数据库中的密码哈希更新了。

我错过了什么吗?请帮忙

1 个答案:

答案 0 :(得分:2)

setPassword()内部也通过beforeSave()致电save()。 很明显,你要对它进行两次哈希处理,这使得它再也无法使用了。