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

なんで?

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

これにより、保存する前にパスワードがクリアされます。

于 2013-09-25T18:54:46.220 に答える
0

関連する件名:CakePHP-パスワードにblowfishハッシュを実装するにはどうすればよいですか?

パスワードdbフィールドのplus+varchar(60)

于 2014-03-24T08:45:42.597 に答える