[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

http://log.noiretaya.com/155