先日、cakephpでログイン機能を実装していたときにハマりましたので共有します。
ログイン機能自体は他のサイトを見ながら実装し、ユーザー登録をしたあとにそのユーザでログインしたらできずに困っていました。
ログインのAuthにはBlowfishを使用
User.php(Model)
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['password'])) {
$passwordHasher = new BlowfishPasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password'], 'blowfish'
);
}
return true;
}
blowfishを使って暗号化しデータベースに保存。
これだけではログインするときに暗号化したパスワードを解読できないみたいです。
そこで
BaseAuthenticate.php
public $settings = array(
'fields' => array(
'username' => 'username',
'password' => 'password'
),
'userModel' => 'User',
'userFields' => null,
'scope' => array(),
'recursive' => 0,
'contain' => null,
//ここがSimpleになっているので、Blowfishに変更
//'passwordHasher' => 'Simple'
'passwordHasher' => 'Blowfish'
);
これでログインするときにパスワードをうまく解読してくれてログインできるようになるはずです!