[CakePHP2.x]AuthComponent 認証をユーザー用と管理者用で分ける
使用環境:CakePHP2.3.1
CakePHPで開発する時、ほぼ9割方使用するであろうAuthコンポーネントですが、
管理者とユーザでテーブルを分ける場合、そのまま実装すると
片方で認証を行うと、もう一方もログイン済となってしまい正しく動作しないようです。
ちょっと一工夫が必要みたいでメモ
個人的にAuthコンポーネントの設定はAppコントローラに書く事が多いです。
AppController.php
キモとなるのは23行目のセッションキーの変更
Authコンポーネント内ではstaticで’Auth.User’で宣言されており、
管理側もユーザ側も同じセッションキーを使用する為上記の現象になるようです。
//フロント、管理識別if (isset($this->params['prefix']) && $this->params['prefix'] === 'admin') { //レイアウト切替 $this->layout = 'admin'; //Authコンポーネント設定 $this->Auth->loginRedirect = '/admin/index'; $this->Auth->logoutRedirect = array('controller' => 'admin_homes', 'action' => 'login'); $this->Auth->loginAction = array('controller' => 'admin_homes', 'action' => 'login'); //認証設定 $this->Auth->authenticate = array( 'Form' => Array( 'fields' => Array( 'username' => 'login_id', 'password' => 'passwd', ), 'scope' => Array( 'AdminUser.state_cd' => STATE_CD_OPEN, ), 'userModel' => 'AdminUser', ), ); // セッションキーの変更(フロントユーザと共通になってしまう為) AuthComponent::$sessionKey = "Auth.AdminUser"; //ログイン情報セット $this->adminuser = $this->Auth->user();} else { //レイアウト切替 $this->layout = 'front'; //Authコンポーネント設定 $this->Auth->loginRedirect = '/index'; $this->Auth->logoutRedirect = array('controller' => 'homes', 'action' => 'login'); $this->Auth->loginAction = array('controller' => 'homes', 'action' => 'login'); //認証設定 $this->Auth->authenticate = array( 'Form' => Array( 'fields' => Array( 'username' => 'login_id', 'password' => 'passwd', ), 'scope' => Array( 'User.state_cd' => STATE_CD_OPEN, ), 'userModel' => 'User', ), ); //ログイン情報セット $this->member = $this->Auth->user();}
参考にさせて頂いたサイト
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2759&forum=3