0

以下は機能します:

// 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が返されます。ただし、データベースでパスワード ハッシュが更新されていることがわかります。

何か不足していますか?助けてください

4

1 に答える 1

2

setPassword()内部的にもbeforeSave()経由で呼び出しますsave()。その場合、2回ハッシュしていることは明らかであり、使用できなくなります.

于 2015-12-26T23:07:55.913 に答える