2009年12月16日 04:30

[PHP]CakePHPのAuthメモ

| http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/505

CakePHPのAuthコンポーネントのセットアップメモ。

環境

こんな感じでAdminルーティングが設定してある。

APP/config/core.php


Configure::write('Routing.admin', 'admin');

APP/config/routes.php


Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true));

APP/config/controllers/app_controller.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


var $components = array('Auth');

ヘルパーはbeforeFilter()で追加できるけどAuthはできない。(というかコンポーネントはできないのかな?)


function beforeFilter()
{
    $this->helpers[] = 'HogeHelper';//出来る
    $this->components[] = 'Auth';//出来ない
}

利用するテーブルとカラムを変えるにはAuth::userModelとAuth::fieldsを設定する。


$this->Auth->userModel = 'Member';
$this->Auth->fields = array(
    'username' => 'account',
    'password' => 'secretkey'
);

エラーメッセージなどの設定と、admin/以外のアクションは認証なしで 利用できるように設定する。


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


function admin_login() {}

function admin_logout() {
    $this->redirect($this->Auth->logout());
}

ビューを作成する

こちらもマニュアルのサンプルがそのまま使える。 Users以外のモデルやカラムの場合変更が必要となる。

APP/view/theme/admin/members/admin_login.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コンポーネントを有効にしたら


Warning: Cannot modify header information

というエラーが出た。ググってみるとheaderの前に何かしらの文字が出力されている可能性があるとのこと。 もしくはutf-8のbom付きだとなる模様。

まず疑うべきはコントローラーとかモデルの最後の「?>」の後ろに改行などがないか。

PHPの「?>」はZend Flameworkのコーディング規約でも書くなと言われていたはずなので、 書かないのがPHP界の常識なはず。でも書くな書くなと言われてもホントに?ほんとにいいの書かなくて? ってどーにも不安だったんですがこれからはきっちりと削除しようかとおもいました。

[PHP]CakePHPのAuthメモタグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/505
[WEBプログラム覚書]2009年12月18日 02:34
[PHP]CakePHPのcheckboxとhasAndBelongsToMany(HABTM)
CakePHPのcheckboxとhasAndBelongsToMany(HABTM)についてのメモ
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?


先月アクセスが多かったページ