CakePHP2.0のAuthComponent

1.X系の感じで使おうと思ったら、結構ハマったのでメモ。

Authコンポーネントは、2.0で大きく変わっていた。

1.ログイン処理部分を自作しなければならないこと

CakePHP1.X系ではloginのメソッドを用意しておけば他の処理は不要だったのだが、CakePHP2.0からは自前で用意しなければならないらしい
<1.0系の時>

public function login() {}

<2.0系の時>

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
   	    return $this->redirect($this->Auth->redirect());
        }
    	else {
    	    $this->Session->setFlash(__('IDがパスワードが違います。'), 'default', array(), 'auth');
    	}
    }
}

2.設定まわりの変更

$this->Auth->authenticateで認証の設定をするように変更。
fieldsとかuserModelとかの設定をどこですればいいのか悩んだ挙句、以下のようになった。
<1.0系の時>

public function beforeFilter() {
	parent::beforeFilter();

	$this->__definedRedirectUrl();

	$this->AppAuth->userModel      = 'manageAccount';
	$this->AppAuth->fields         = array('username' => 'user_id', 'password' => 'pw');
	$this->AppAuth->loginError     = 'IDまたはパスワードが違います';
	$this->AppAuth->authError      = '再度ログインしてください';

	$this->AppAuth->loginAction    = array('plugin' => 'manage', 'controller' => 'account', 'action' => 'login');
	$this->AppAuth->loginRedirect  = array('plugin' => 'manage', 'controller' => 'account', 'action' => 'login');
	$this->AppAuth->logoutRedirect = array('plugin' => 'manage', 'controller' => 'account', 'action' => 'login');
}

<2.0系の時>

public function beforeFilter() {
	parent::beforeFilter();

	$this->Auth->loginError     = 'IDまたはパスワードが違います';
	$this->Auth->authError      = '再度ログインしてください';
	$this->Auth->authenticate   = array('Form' =>
	                              array('userModel' => 'Admin',
	                                    'fields'    => array('username' => 'user_id', 'password' => 'pw'))
	                              );

	$this->Auth->loginAction    = array('controller' => 'account', 'action' => 'login', 'mng' => true);
	$this->Auth->loginRedirect  = array('controller' => 'account', 'action' => 'login', 'mng' => true);
	$this->Auth->logoutRedirect = array('controller' => 'account', 'action' => 'login', 'mng' => true);
}

新しいAuthComponentはBasic認証やoAuth認証にも拡張できそうなので、時間ができたらやってみるか。