在CakePHP 2.3中使用bcrypt

时间:2013-02-04 19:30:25

标签: php cakephp bcrypt

我注意到在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,但我不确定。

有什么建议吗?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

为什么?

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

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

答案 2 :(得分:0)

相关主题:CakePHP - How do I implement blowfish hashing for passwords?

密码数据库字段

加+ varchar(60)