HOME>WEBプログラム覚書>[PHP]CakePHPのAuthメモ
[PHP]CakePHPのAuthメモ
CakePHPのAuthコンポーネントのセットアップメモ。
環境
こんな感じでAdminルーティングが設定してある。
APP/config/core.php
PHP
<?php
Configure::write('Routing.admin', 'admin');
?>
APP/config/routes.php
PHP
<?php
Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true));
?>
APP/config/controllers/app_controller.php
PHP
<?php
function beforeFilter()
{
if (preg_match('/^admin/', $this->params['url']['url'])) {
$this->view = 'Theme';
$this->theme = 'admin';
}
}
?>
設定
ほとんどのコントローラーにAdmin用のメソッドが存在してるので
AppControlerでAuthコンポーネント使うぞ宣言する。
APP/controllers/app_controller.php
PHP
<?php
var $components = array('Auth');
?>
ヘルパーはbeforeFilter()で追加できるけどAuthはできない。(というかコンポーネントはできないのかな?)
PHP
<?php
function beforeFilter()
{
$this->helpers[] = 'HogeHelper';//出来る
$this->components[] = 'Auth';//出来ない
}
?>
利用するテーブルとカラムを変えるにはAuth::userModelとAuth::fieldsを設定する。
PHP
<?php
$this->Auth->userModel = 'Member';
$this->Auth->fields = array(
'username' => 'account',
'password' => 'secretkey'
);
?>
エラーメッセージなどの設定と、admin/以外のアクションは認証なしで
利用できるように設定する。
PHP
<?php
function beforeFilter()
{
if (preg_match('/^admin/', $this->params['url']['url'])) {
$this->view = 'Theme';
$this->theme = 'admin';
$this->Auth->userModel = 'Member';
$this->Auth->fields = array(
'username' => 'account',
'password' => 'secretkey'
);
$this->Auth->loginError = 'パスワードが違います。';
$this->Auth->authError = '管理者用のページです。';
} else {
// admin/以外は認証不要
$this->Auth->allow('*');
}
}
?>
ログインとログアウトのアクションを追加する。
マニュアルそのまんまって感じです。
APP/controllers/members_controller.php
PHP
<?php
function admin_login() {}
function admin_logout() {
$this->redirect($this->Auth->logout());
}
?>
ビューを作成する
こちらもマニュアルのサンプルがそのまま使える。
Users以外のモデルやカラムの場合変更が必要となる。
APP/view/theme/admin/members/admin_login.php
PHP
<?php
if ($session->check('Message.auth')) $session->flash('auth');
echo $form->create('Member', array('action' => 'login'));
echo $form->input('account');
echo $form->input('secretkey');
echo $form->end('Login');
?>
想像以上に簡単だ。単純にAuthを使う場合、悩むことはなさそう。
問題はACLとかAROとかACOが絡んできた時かな。そもそも機能がいまいち理解できてないしw
Authコンポーネントを有効にしたら出たエラー
Authコンポーネントを有効にしたら
PHP
<?php
Warning: Cannot modify header information
?>
というエラーが出た。ググってみるとheaderの前に何かしらの文字が出力されている可能性があるとのこと。
もしくはutf-8のbom付きだとなる模様。
まず疑うべきはコントローラーとかモデルの最後の「?>」の後ろに改行などがないか。
PHPの「?>」はZend Flameworkのコーディング規約でも書くなと言われていたはずなので、
書かないのがPHP界の常識なはず。でも書くな書くなと言われてもホントに?ほんとにいいの書かなくて?
ってどーにも不安だったんですがこれからはきっちりと削除しようかとおもいました。
投稿日 |
2009年12月16日 04:30 |
カテゴリ |
PHP |
タグ |
CakePHP | フレームワーク |
トラックバック URL |
http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1200 |
コメント