[CakePHP]Authで2種類のユーザー認証を設定する方法

[CakePHP1.3.11]

今回は、Webサービスによくよくあるパターンである、サイト管理者向けページと、ユーザーページ(いわゆるマイページというやつ)2つの専用ページを持つサイトにおける、Auth設定方法を書いておきます。対象は、CakePHP1.3ですが、2.xでもほぼ同様のコードで動作します。

なお、この記事では、サイト管理者ページ名を、admin、マイページをmemberとして進めていきます。認証方法は、admin:Basic認証、member:ログイン画面にてメールアドレスとパスワードの認証とします。

まず、config/core.phpの、prefix設定のところを、以下のようにします。

[php]
Configure::write(‘Routing.prefixes’, array(‘admin’, ‘member’));
[/php]

そして、app_controller.phpで以下のように設定します。

[php]
class AppController extends Controller {

var $components = array(‘Session’, ‘Auth’);

function beforeFilter() {

$this->Auth->allow(‘*’);

//Auth Settings
if (!empty($this->params[‘prefix’]) && in_array($this->params[‘prefix’], Configure::read(‘Routing.prefixes’))) {

$this->layout = $this->params[‘prefix’];

//for Administrator
if ($this->params[‘prefix’] == ‘admin’) {
$this->Security->loginOptions = array(‘type’ => ‘basic’, ‘realm’ => ‘Admin Area’);
$this->Security->loginUsers = array(‘admin’ => ‘Basic認証のパスワード’);
$this->Security->requireLogin();
}

//for Member
if ($this->params[‘prefix’] == ‘member’) {
$this->Auth->loginAction = ‘member/users/login’;
$this->Auth->loginRedirect = ‘member/users/index’;
$this->Auth->fields = array(‘username’ => ’email’, ‘password’ => ‘password’);
$this->Auth->autoRedirect = true;
$this->Auth->loginError = "IDかパスワードが正しくありません";
$this->Auth->authError = "Authentication Error";
}
}

}

}
[/php]

このように、AppController内の、beforeFilter内で現在のprefixesの値で分岐させて、Authの設定を切り替えます。上記が一番のポイントで、その他ログインなどは、CookBookに書いてある様にすれば大抵問題なく動きます。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.