戻る

2006/07/26

Auth認証拡張

// 認証最初からの有効期限(秒)
'Expire' => 3600,
// 前回認証ページ内処理をしてからの次回アクセス迄の有効時間
'Idle' => 1800,
'typecol' => "user_type", // ユーザータイプ分類
'roomcol' => "user_roomNo", // 部屋番号分類
);

//
//複数の認証グループを管理をする場合は
//上記のデーターベースを名称を変えてそれぞれで
//Auth.php、option.incを別々に用意する必要があります。
//データベースを1つで複数の認証管理する場合は以下の
//方法で管理します。
//ここではとりあえず以下の$AuthRoomNoで1,2,3の
//部屋として管理します。
//
//まずは定義!!
//2進数の各bitの有無でそのへやのユーザーかどうか
//調べるので分かり易く書くと
$Room1 = bindec('1'); //1のこと
$Room2 = bindec('10'); //2のこと
$Room3 = bindec('100'); //4のこと
// ・
// ・
//これを使う部屋番号を指定
$AuthRoomNo = $Room1; //今回は部屋番号1とします
//$AuthRoomNo = $Room2;
//$AuthRoomNo = $Room3;

?>

さていよいよ次回は本題ExAuthの作成です。

PHP5とPear::Auth認証を拡張したクラスを作ってみる。
その2:Auth.inc作成まで

本題のPHPによる認証部分の作成です。

まずどの様なファイルを作成するか決めておきます。

今回は認証するルートにあるindex.htmlファイルを表示
する場合に「認証」が必要とします。
また認証用の実行ファイルはルートのにphpfuncという
ホルダを作り認証のクラス本体のファイルをおきます。

┬index.html
└phpfunc\
   auth.inc(htmlからリクエストする)
   Exauth.php
   (拡張した認証システム本体。auth.incが呼び出す。)
   option.inc
   (データベースの形式やその他のオプションが入る
            Exauth.phpが読み込む)
   useradd.php(一人目の新規ユーザー作成用見本)

ファイルの配置は上記を予定します。


認証するページをindex.htmlとします。
認証ページの先頭に1行次のように記述することで
認証ができるようにします。

※以後のプログラムは、このブログで表示する都合上
 プログラムの部分の”<”と”>”は
 全角で記述されています。
半角に変更しないと実際は正常に動作しません!!


<?php require_once "phpfunc/Auth.inc"; ?>
// 認証用するにはすべてのページの最も先頭にこの文を置く。


実際に読み込まれる
phpfunc/Auth.incファイル本体は以下のように記述します。

以下Auth.inc
-----------------------------------------------------

<?php
///////////////// 認証の実行ファイル //////////////////
//ExAuthをリクエストして
require_once "ExAuth.php";
//認証インスタンス作成
$auth = new Ex_Auth('DB', $auth_options, $Exauth_options);
// 認証開始
$auth->start();
// 存在しないなら進めない
if (!$auth->getAuth()) {exit;}
//今回はroom番号でも入室許可を与えるので
if (!$auth->checkRoom($AuthRoomNo)){exit;}
// セッション偽装防止
session_regenerate_id();
?>

PHP5とPear::Auth認証を拡張したクラスを作ってみる。
その1:準備編

PearのAutをhそのまま使ったのでは認証したユーザー
が管理権限(admin)のあるユーザーかそれとも普通
のユーザーかの区別をするものが特別に準備されていません。
そこでそれらの権限をユーザーデーターに追加して
必要になったら呼び出せるように拡張したクラスを
作成してみます。

まず、作成する前に環境の準備です。
サーバーはapacheを使用します。
クラスを使ってPearのAuthというクラスを継承して
独自の認証をする為にPHPのバージョンは5を使用
しましょう。
むろんPearのAuthもダウンロードして使える様にして
おきます。
そして認証するユーザーのデータを保存するための
データベースには今回はMySQLを使います。
今回はPearを使っているので簡単に他のデーター
ベースに変えることが可能です。
上記の使うべきソフトがインストールされ環境が
整ったら作成開始です。
まず、apacheの環境ファイル(httpd.conf)に
以下の行があるでしょうか?

AddType application/x-httpd-php .htm
AddType application/x-httpd-php .html

これは拡張子が.htmや.htmlのHTMLファイルも
.phpファイルと同じように動作する設定です。
つまり、HTMLファイルの中に
<?PHP ?>
を使ってHTMLの中にPHPを記述しても、通常の
*.phpファイルと同じ様に動作するようになります。
最初から拡張子を*.phpにしておけば必要ないのでは
と思われるかもしれませんが、HTMLファイルなら
認証開始するまではPHPファイル名が現れませんので
PHPで動作しているのを感じさせないので
私は好んで使っています。

さて認証に使うデータベースを先に作りましょう。
データベース名は何でもよいのですが、
今回は authdb とします。

次にその中にTableを作ります。
予めSQLファイル(authdb.sql)を作っておいて
MySQLで実行してよいでしょう。

以下読み込むSQLファイル内容
authdb.sql

-----------------------------------------------
-- MySQL dump
--
-- Host: localhost Database: authdb
-----------------------------------------------
--
-- Table structure for table 'myuser'
--

DROP TABLE IF EXISTS `myuser`;
CREATE TABLE `myuser` (
`user_id` mediumint(8) NOT NULL auto_increment,
`user_name` varchar(64) default '' NOT NULL,
`user_password` varchar(64) default '' NOT NULL,
`user_type` varchar(64) default 'user',
`user_roomNo` tinyint(4) NOT NULL default '1',
PRIMARY KEY (`user_id`)
) TYPE=MyISAM;

------------------------------------------------------------------------------

SQLを実行してテーブルができたら。

PHPからMySQLにアクセスするユーザーを作っておきます。
今回は
ユーザー名:abcd
パスワード:123xyz とします。

今回はここまで
次回はいよいよPHPで認証クラスの作成です。