AuthComponentでUsers Table以外を使う時

小ネタ。 Cake1.2.6

HogeConpornentがHogeモデルを使ってる場合、認証画面をそのままHoge::login()って作るとうまく行かない。デフォルトで、Userモデルを見てしまうから。アクセスしても/users/loginに飛ばされるし。

beforeFileterなどで、下記の設定が必要

$this->Auth->userModel = $this->modelClass;

モデル名を直接指定したければ、modelClassを固定の文字列にすればOK


ということで、よく設定する内容はこんな感じ。

//認証エラーメッセージ
$this->Auth->loginError = 'ログインエラー。IDもしくはパスワードが違います。';

//アクセス権がない場合のエラーメッセージ 非表示
$this->Auth->authError = ' ';

//認証するフィールド名
$this->Auth->fields = array(
      'username' => 'loginid',
      'password' => 'password'
);

//アクセス制限しないアクション
$this->Auth->allow('');

//ログイン後の遷移先を固定
$this->Auth->loginRedirect = array('controller' => 'adminpanels', 'action' => 'top');

//Authで利用するモデルをUser以外に指定
$this->Auth->userModel = $this->modelClass;


さらに、ログイン後の遷移を完全固定するため、リファラー情報をloginアクション内で消してます。

function login() {
    //ログイン後に強制的に$this->Auth->loginRedirectの画面にリダイレクトさせるため、リファラ情報を消す
    $this->Session->delete('Auth.redirect');
}