NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2012.08.07

CakePHP2系でUserモデル以外を利用して認証する方法

卓司

こんにちは。卓司です。

今回はCakePHP2系の認証でUserモデル以外を利用して認証する方法についてまとめました。

cake_blog

CakePHPの認証を素直に使う場合、userモデルを作成して認証を行うと思います。
認証チュートリアルはこちら(CakePHP 本家)

しかし、Userモデルとは別モデルで認証させたいという場合は以下のようにします。
※上記のチュートリアルを済ませている状態の環境で以下の対応を行います。

対象のModel(DBを含む), View, Controllerを作成

認証で利用するModel, View, Controllerを作成します。
例えば、今回はManagerモデルを利用して認証させるとした場合、チュートリアルで作成したUserモデルをコピーしてManagerモデルを作成します。
※同様にして、View, Controller, DBも作成します。

AppController修正

チュートリアルで作成したAppController.phpを以下の通り修正してください。

public $components = array(
        'Session',
        'Auth' => array(
            // 認証時の設定
            'authenticate' => array(
                'Form' => array(
                    // 認証時に使用するモデル
                    'userModel' => 'Manager',
                    // 認証時に使用するモデルのユーザ名とパスワードの対象カラム
                    'fields' => array('username' => 'code' , 'password'=>'password'),
                ),
            ),
            // ログイン失敗時に出力するメッセージを設定
            'loginError' => 'パスワードもしくはログインIDをご確認下さい。',
            // ログインしていない場合のメッセージを設定
            'authError' => 'ご利用されるにはログインが必要です。',
            // ログインに使用するアクションを指定
            'loginAction' => array('action' => 'login'),
            // ログイン後のリダイレクト先を指定
            'loginRedirect' => array('controller' => 'posts', 'action' => 'index'),
            // ログアウト後のリダイレクト先を指定
            'logoutRedirect' => array('action' => 'login'),
        ),
    );

これで、Managerモデルを利用して認証が行えます。

まとめ

モデルを指定して認証する方法はCakePHP1系とは少し違うみたいなので、2系を利用される方は是非参考にしてみてください。