cakePHPでの認証モジュール

2007/08/04 | cakePHP

以前は認証モジュールとして「Pear::Auth」を使おうと思っていたけど、ちょっと面倒。
Pear::Authはいろいろ依存しているライブラリがあって、単純にそれだけをインストールする、ということは難しそう。tarballをダウンロードして・・・ということもできるだろうけど、使えるようにできるかどうか実証するのが面倒。
単にパスを通してしまって従来の記述方法でやるのが簡単だけど、そこはやっぱりcakePHPのお作法にそった形で使えるようにしたいので、そこまでにたどりつくには少し時間がかかりそうだ(きっと賢者がいると思うので、検索する時間くらいは確保してもいいかもしれない)。
世の中にお手軽な認証コンポーネントが公開されているので、それを使うことにした。

いちばん簡単な認証システム

cakePHPではおなじみのDozonoさん作だ。
使い方はこんな感じ。ファイルはここからダウンロード

1.まず必要なファイルをダウンロードして適切な場所に設置する。
○sd_auth.phpをcomponentsディレクトリに設置(ファイル中にユーザ名とパスワードを記述)。
○login.thtmlをlayoutsディレクトリに設置。

2.認証をかけたいコントローラーに対して以下のように記述すればよい。
var $components = array(‘SdAuth’);
function beforeFilter()
{
 if($this->SdAuth->isloggedin() == FALSE){
  $this->layout = “login”;
 } else {
  $this->layout = “default”;
 };
}

これでOK。必要に応じてログアウト処理を適切なところに書けばよい。
function logout(){
$this->SdAuth->logout();
$this->redirect(“どこか”);
}

ただ、これだけだと、この処理を書いたコントローラーでのみ認証が有効になるだけで、その他のコンポーネントにはきいてこない。全てのコンポーネントで有効にするには・・・。

cake/app_controller.phpをapp/app_controller.phpにコピーして、この中に上記を記述する。

通常はコントローラの元ファイルとしてcake/app_controller.phpを読み出すのだが、app/app_controller.phpが存在するとこちらを読むようになる。

シンプルだけど有効なコンポーネントだ。ただこのままだとユーザ1人分の認証しか出来ない。sd_auth.phpの中を覗けばわかるが、ユーザ名とパスワードが決めうちで定義されているからだ。
これを拡張すれば複数ユーザにも対応できそうな感じ。
(1) ユーザ名とパスワードを配列で定義
 これだけで複数ユーザ対応は出来そうだ。認証に成功したときにセッションにtrueを書き込むのではなく、ユーザ名を書き込んでおけばいろいろ使い回しがききそう。
(2) データベースにユーザ情報を持たせたい
 テーブル(モデル)に情報を持たせるわけだが、コンポーネントからモデルにアクセスできたっけ・・・。これが出来れば非常に簡単だ。これは後日検証してみるとしよう。

あと・・・コンポーネント中ではpostされた値に対して$_POSTでアクセスしているけど、これcakePHPっぽくしたいな。
少し時間が出来たらチャレンジしてみることにする。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net