2

我注意到在 CakePHP 的 3.2 版本中,他们添加了对使用 bcrypt 散列的支持。我想利用这一点,但我似乎无法找到如何正确使用它。

在我的User模型beforeSave()方法中,我正在这样做:

if(isset($this->data[$this->alias]['password'])) {
    $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'], 'blowfish');
    unset($this->data['User']['passwd']);
}

它成功地在数据库中为用户帐户保存了一个 bcrypt 哈希。但是,我不确定我打算如何登录用户。我的用户控制器具有以下登录操作:

public function login() {
    if($this->request->is('post')) {
        if($this->Auth->login()) {
            $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash('Invalid username or password, try again.');
        }
    }
}

但它每次都说“无效的用户名或密码”,我确定这是正确的电子邮件/密码。我认为这是因为 AuthComponent 不知道它应该使用 bcrypt 但我不确定。

有什么建议么?

4

3 回答 3

5

好吧,我设法解决了。以下是相关代码:

AppController.php

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Blowfish' => array(
                'fields' => array('username' => 'email')
            )
        ),
        'loginRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home')
    )
);

User.php

public function beforeSave($options = array()) {
    if(isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'], 'blowfish');
        unset($this->data['User']['passwd']);
    }

    return true;
}
于 2013-02-05T00:59:07.490 回答
0

相关主题:CakePHP - 如何为密码实现河豚散列?

plus+ varchar(60) 用于密码数据库字段

于 2014-03-24T08:45:42.597 回答
0

为什么?

unset($this->data['User']['password']);

这将在保存之前清除密码..

于 2013-09-25T18:54:46.220 回答