CakePHPのAuthコンポーネント

便利。
だけど、パスワード暗号化が独特なのでちょっとTips。
AuthComponent::authenticate にパスワード変換ロジックをセットすると
それが呼ばれるようになる。


面倒なのでコンポーネントとして作成。
条件としては、hashPasswordsというメソッドを用意するだけ。
引数はcontroller::data (ヘルパーで作成したFORMの値?)が渡される

class PasswordComponent extends Object
{
    var $model = 'Login';
    var $col = 'password';
    
    function hashPasswords($data)
    {
        if (isset($data[$this->model][$this->col])) {
            $data[$this->model][$this->col] = $this->crypt($data[$this->model][$this->col]);
        }
        return $data;
    }
    
    function crypt($password)
    {
        return sha1($password);
    }
}


しかしこれをやってハマりました。
AuthComponent::startup() 内で変換後のデータをcontroller::dataに上書きするので
カラム名を同じにしてしまうと元のパスワードがとれなくなってしまう。。。

POST時の名前と返還後の名前を
変換ロジック内で変えた方がいいのかもしれません。。。

class PasswordComponent extends Object
{
    var $model = 'Login';
    var $org_col = 'org_password';
    var $col = 'password';
    
    function hashPasswords($data)
    {
        if (isset($data[$this->model][$this->org_col])) {
            $data[$this->model][$this->col] = $this->crypt($data[$this->model][$this->org_col]);
        }
        return $data;
    }
    
    function crypt($password)
    {
        return sha1($password);
    }
}