さて,昨日,passwordHasher を使って「解決した」と書きましたが,色々運用試験してみると,全く解決していないことが分かりました。
そこで,現在,SimplePasswordHasher ではなく,BlowfishPasswordHasher を使うことで対応しています。
具体的には,次の通りです。
AppController.phpにて,BlowfishPasswordHasherを使うことを明示します。つまり,class を宣言する前に次の行を入れます。
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth');
そして,AuthComponent が BlowfishPasswordHasher を使うように設定します。
public $components = [
'Auth' => [
'authenticate' => [
'Form' => [
'passwordHasher' => 'Blowfish',
],
],
],
'Session',
];
Auth の下には,loginAction や,loginRedirectなど色々設定すべきプロパティがありますが,今回は割愛。
とにかく,Form で passwordHasher に Blowfish を使うと明示。
また,前回の記事で,コントローラー内部のパスワードの保存時に,直にPasswordHasher を使って暗号化し,保存していた部分は全て削除。
受けとったデータをそのまま,保存するようにします。
暗号化は次の2)Model 側の,beforeSave を用います。
(昨日は,使わない・・・って書いたのに)
昨日の記事では,BeforeSave なんぞ使わないとしましたが,使います。
パスワードを保管するModel,例えば User.php にて,classの宣言前に,次のように明示。
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth');
そして,class の中で,beforeSave 関数を設定。
public function beforeSave($options = []) {
// パスワードの暗号化
if (!empty($this->data[$this->alias]['password'])) {
$passwordHasher = new BlowfishPasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password']
);
}
return true;
}
これでどうでしょうか。
前回,CakePHP2.x系で大丈夫じゃわい!
と書きましたが,今回のように,公式チュートリアルどおりにやって動かないときに,ちょっと不安になってきますね。
マイナーバージョンは更新され続けているとはいえ,メジャーアップデートは4までいっちゃいましたからね・・・。切り捨てられているような雰囲気もじゅうぶんに感じます。
うーん,今後は,CakePHP4系に乗り換えた方がよいのかな。
もしくは,Laravel?
フレームワークなので,学習コストが低ければ,CakeでもLaravelでも良いのですが。Ruby on Rails は,別にRails サーバー立てないとダメなので,レンタルサーバーだと厳しいですね。いちいち,Herokuとか使わないといけないのは,避けたい・・・。
投稿記事のカテゴリやタグと同じ記事をランダム表示します。