KANTENNA.COM

Solarized

HOME > WEBプログラム覚書 > [PHP]CakePHPのAuthメモ

[PHP]CakePHPのAuthメモ

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

環境

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

APP/config/core.php

PHP
  1.  <?php
  2.  Configure::write('Routing.admin', 'admin');
  3.  ?>

APP/config/routes.php

PHP
  1.  <?php
  2.  Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true));
  3.  ?>

APP/config/controllers/app_controller.php

PHP
  1.  <?php
  2.  function beforeFilter()
  3.  {
  4.   if (preg_match('/^admin/', $this->params['url']['url'])) {
  5.   $this->view = 'Theme';
  6.   $this->theme = 'admin';
  7.   }
  8.  }
  9.  ?>

設定

ほとんどのコントローラーにAdmin用のメソッドが存在してるので AppControlerでAuthコンポーネント使うぞ宣言する。

APP/controllers/app_controller.php

PHP
  1.  <?php
  2.  var $components = array('Auth');
  3.  ?>

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

PHP
  1.  <?php
  2.  function beforeFilter()
  3.  {
  4.   $this->helpers[] = 'HogeHelper';//出来る
  5.   $this->components[] = 'Auth';//出来ない
  6.  }
  7.  ?>

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

PHP
  1.  <?php
  2.  $this->Auth->userModel = 'Member';
  3.  $this->Auth->fields = array(
  4.   'username' => 'account',
  5.   'password' => 'secretkey'
  6.  );
  7.  ?>

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

PHP
  1.  <?php
  2.  function beforeFilter()
  3.  {
  4.   if (preg_match('/^admin/', $this->params['url']['url'])) {
  5.   $this->view = 'Theme';
  6.   $this->theme = 'admin';
  7.  
  8.   $this->Auth->userModel = 'Member';
  9.   $this->Auth->fields = array(
  10.   'username' => 'account',
  11.   'password' => 'secretkey'
  12.   );
  13.  
  14.   $this->Auth->loginError = 'パスワードが違います。';
  15.   $this->Auth->authError = '管理者用のページです。';
  16.  
  17.   } else {
  18.   // admin/以外は認証不要
  19.   $this->Auth->allow('*');
  20.   }
  21.  }
  22.  ?>

ログインとログアウトのアクションを追加する。

マニュアルそのまんまって感じです。

APP/controllers/members_controller.php

PHP
  1.  <?php
  2.  function admin_login() {}
  3.  
  4.  function admin_logout() {
  5.   $this->redirect($this->Auth->logout());
  6.  }
  7.  ?>

ビューを作成する

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

APP/view/theme/admin/members/admin_login.php

PHP
  1.  <?php
  2.  if ($session->check('Message.auth')) $session->flash('auth');
  3.  echo $form->create('Member', array('action' => 'login'));
  4.  echo $form->input('account');
  5.  echo $form->input('secretkey');
  6.  echo $form->end('Login');
  7.  ?>

想像以上に簡単だ。単純にAuthを使う場合、悩むことはなさそう。 問題はACLとかAROとかACOが絡んできた時かな。そもそも機能がいまいち理解できてないしw

Authコンポーネントを有効にしたら出たエラー

Authコンポーネントを有効にしたら

PHP
  1.  <?php
  2.  Warning: Cannot modify header information
  3.  ?>

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

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

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

PHPで作る携帯サイトデベロッパーズガイド
作者:滝下 真玄 | 価格:¥ 3,150

トラックバック(1)

2009年12月18日 02:34

[PHP]CakePHPのcheckboxとhasAndBelongsToMany(HABTM)WEBプログラム覚書

CakePHPのcheckboxとhasAndBelongsToMany(HABTM)についてのメモ続きを読む

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.08

[Ubuntu11.10]Winows XPユーザーがUbuntuを使ってみて

Windows XPとUbuntuのデュアルブート環境にしてみておもったこと。

2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。