スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CakePHP の Auth コンポーネントを使ってログイン認証機能を実現する

CakePHP の Auth コンポーネントを使って、最低限のログイン認証機能を実現するには何をすれば良いのか、それをメモしておく。

Authコンポーネントの使い方については、CakePHP の公式サイトのマニュアルにも書かれている。
http://book.cakephp.org/ja/view/1250/%E8%AA%8D%E8%A8%BC

ただ、これでは今一つ分りにくかったので、自分なりに、チュートリアル型式でまとめておくことにする。



●このメモで実現する機能

(1) 自サイトにアクセスして来たユーザーがログイン状態かどうかチェックする。
  未ログイン状態であれば、ログイン画面に転送する。
(2) 新規ユーザー登録は誰でもできる。
  ユーザーの編集や削除もできてしまう。
(3) テーブルは2つ。
  ユーザーID管理テーブルと、自サイト本来のサービスを提供するためのダミーテーブル。



●チュートリアル

(1) あらかじめテーブルを2つ作成しておく。


CREATE TABLE users (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(64) NOT NULL UNIQUE,
password varchar(64) NOT NULL,
created DATETIME,
modified DATETIME
);

CREATE TABLE hoges (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
hogename varchar(64) NOT NULL UNIQUE,
created DATETIME,
modified DATETIME
);


最初のテーブルがユーザーID管理用で、users という名称で作成しておくことにより
Authコンポーネントが自動的に認識してくれる。
また、username、password というカラムも必須。
こちらも、この名称でカラムを作っておくことでAuthコンポーネントが自動的に認識してくれる。

2番目のテーブルは、本来のサービスを提供するためのテーブルだが、ここではダミーである。


(2) bake することにより、上記2つのテーブルへのアクセスコードを生成する。

bake方法についてはこちらを参照。
http://akabanessa.blog73.fc2.com/blog-entry-131.html


これにより、users テーブル、hoges テーブルへの、レコード追加・削除・編集のための
controller、view、modelがそれぞれ作成される。

この状態ではまだ認証機能を入れていないため、誰でも自由にこれらの機能にアクセスできてしまう。


(3) ログイン画面を用意する

ディレクトリ app/views/users の中に、login.ctp ファイルを作成する。
ファイルの内容は以下のとおり。


<?php
if ($session->check('Message.auth')) {
echo $session->flash();
echo $session->flash('auth');
}

echo $form->create('User', array('action' => 'login'));
echo $form->input('username');
echo $form->input('password');
echo $form->end('Login');
?>



(4) app ディレクトリの中に、app_controller.php ファイルを作成する。
ファイルの内容は以下のとおり。


<?php
class AppController extends Controller{

// Authコンポーネントの利用を宣言する
var $components = array('Auth', 'Session'); // Not necessary if declared in your app controller

function beforeFilter() {

// この行を入れると、パスワードの暗号強度が高まる。
// ただし、一度決めたら、後で違う方式に変更することはできないので注意。
Security::setHash('sha256'); // md5 または sha1 か sha256

// この下2行は、ログインエラーメッセージ等を変更したい場合以外は必要ない。
$this->Auth->loginError = "This message shows up when the wrong credentials are used";
$this->Auth->authError = "This error shows up with the user tries to access a part of the website that is protected.";
}
}



これにより、このサイト内の全てのコントローラで、Authコンポーネントの認証機能が有効になる。


(5) users_controller.php を修正

app/controller 内にある users_controllers.php に以下のコードを追加する。


function beforeFilter() {
parent::beforeFilter();

// ユーザー追加コマンドだけは、未ログイン状態でも使用可能にするため
$this->Auth->allow('add');
}

function login() {
}

function logout() {
$this->Session->setFlash('Logout');
$this->redirect($this->Auth->logout());
}



●なんと、たったこれだけで認証のしくみが機能してしまうのだ!!

未ログイン状態で、http://example/cake/hoges/add などにアクセスしようとすると、ログイン画面に飛ばされる。
http://example/cake/users/add にアクセスして、新規ユーザー登録した後、ログインすれば、全ての機能にアクセスできるようになる。




ただし、この状態では以下のような問題点や不満点がある。
ここでは、あくまでも最低限の認証を実現するには何を書いたら良いのか、ということを示してみたのである。


(1) 誰でもユーザー一覧を見ることができてしまう。
(2) ユーザー登録画面にはパスワード確認用入力覧がほしい。
(3) ユーザー登録画面ではキャプチャを付けたい。
(4) ユーザー登録時にはメールによる認証を行いたい。



スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。