【PHP】CakePHPでパスワードをハッシュ化する
こんばんは。
CakePHPでは、ユーザ登録の際にフォームにusernameとpasswordがある場合、パスワードを自動でハッシュ化してくれます。
しかし、パスワード再発行処理や、変更処理などをした場合には、ハッシュ化はしてくれません。
そこで、指定した値をハッシュ化する方法をメモしておきたいと思います。
$pass = "test"; $password = AuthComponent::password($pass);
このようにAuthComponentのpasswordメソッドでハッシュ化することが出来ます。
また、ユーザ登録の際に2つのフォームを出してパスワードの同一性を確認する場合など、逆に自動でハッシュ化してほしくないときがあります。その際には、こちらのサイトに書いてあるやり方でハッシュ化を防ぐことが出来ます。
そして、先ほどのハッシュ化の方法で、好きなタイミングでハッシュ化をすれば良いです。
今回は以上です。
それでは。
2015/03/13追記
CakePHP 2.3からは以下の方法でパスワードがハッシュ化するようになりました。
なお、2.4からはSimplePasswordHasherも追加されましたが、3.0からは非推奨になるようです(参考: シンプルな認証と承認のアプリケーション — CakePHP Cookbook 2.x ドキュメント
)
- AppController
<?php public $components = array( 'Auth' => array( 'authenticate' => array( 'Form' => array( 'passwordHasher' => 'Blowfish' ) ) ) ); ?>
- AppModel
<?php App::uses('AppModel', 'Model'); App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); class User extends AppModel { // ... public function beforeSave($options = array()) { if (isset($this->data['User']['password'])) { $passwordHasher = new BlowfishPasswordHasher(); $this->data['User']['password'] = $passwordHasher->hash( $this->data['User']['password'] ); } return true; } ?>