読者です 読者をやめる 読者になる 読者になる

Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【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;
}
?>