4

我有一个用户模型、一个用户控制器和一个使用用户模型的帐户控制器(帐户控制器在创建帐户、登录、注销时使用)。

一切正常,除了 AccountController 中的 beforeSave 函数。我正在尝试使用 beforeSave 对我的密码进行哈希处理,但它不起作用(密码保存在数据库中,未经哈希处理)。

public function beforeSave() {
    parent::beforeSave();   

    if (isset($this->request->data['User']['password'])) {
        $this->request->data['User']['password'] = sha1($this->request->data['User']['password']);
    }

    return true;
}

几点注意事项:

  • 我使用“sha1”对密码进行哈希处理,因为我正在将旧系统转换为 CakePHP(旧系统使用 sha1 对密码进行哈希处理)
  • 即使我return false;仍然执行保存功能(我认为不应该是这种情况
  • 打电话debug($this->request->data)给我什么
  • 我在我的 UsersController 中添加了相同的 beforeSave 函数,但效果不佳

我认为在我的情况下beforeSave没有被调用,我只是不知道为什么。


已解决: beforeSave 函数必须进入模型内部,这是我现在的 beforeSave 函数:

public function beforeSave($options = array()) {
        parent::beforeSave();
        $this->data['User']['password'] = sha1($this->data['User']['password']);
        return true;
    }
4

1 回答 1

3

beforeSave 是一个模型回调,所以在你的模型中定义它。

于 2012-04-14T11:14:23.620 回答