Pear で ベーシック認証(DB編)[Pear::Auth_HTTP]

Pear の中に Auth_HTTP というパッケージがあります。 このパッケージを利用することでベーシック認証を行うことができます。 Auth_HTTPは、Authクラスから派生しており、 ユーザーやパスワードの保存先(認証先)は、 非常に豊富で、ファイルやDB、認証サーバー等柔軟に対応できます。

環境構築

Pear パッケージの導入

Pearのパッケージをインストールします。 必要なパッケージは、 DB 等が必要になります。

pear install [パッケージ名]

Auth_HTTP で MySQL を使った ベーシック認証

MySQL を使った認証を次に示します。

<?php

require_once "Auth/HTTP.php";

// Authオプション
$params = array(
'dsn'=>"mysql://username:password@localhost/database",
'table'=>"usermng",                                    // テーブル名 
'usernamecol'=>"username",                             // ユーザ名の列名
'passwordcol'=>"password",                             // パスワードの列名
'cryptType'=>"md5",                                    // パスワードの暗号化形式
'db_Fields'=>"*",                                       // 他の項目の取得を可能にする
);

$objAuth = new Auth_HTTP("DB", $params);
// realm領域名
$objAuth->setRealm('Please Enter Your Password');

// 認証をキャンセルや認証エラーした際に表示されるメッセージ
$objAuth->setCancelText('<h2>Error 401</h2>');

// 認証プロセスの開始
$objAuth->start();

if($objAuth->getAuth()) {
    echo "ようこそ!" . $objAuth->username . "さん<br>";
    // メールアドレスを取得。
    echo $objAuth->getAuthData('email');
};


?>

ここでは、ユーザーの管理がDB( MySQL )で行われているものとしています。 そのため、Authクラスをインスタンス化する際のストレージドライバにDBを指定します。 ストレージドライバがDBの場合、次のオプションを指定することができます。

キー説明デフォルト値
dsn DBへの接続文字列 ''
table 認証データが保持されるデータベースのテーブル名 auth
usernamecol ユーザー名が保持される列名 'username'
passwordcol パスワードが保持される列名 'password'
db_fields 認証データが保持されるテーブルから他の項目も取得したいときに指定する列名 ''
cryptType 暗号化形式 'md5'

次にrealm領域名、認証をキャンセルや認証エラーした際に表示されるメッセージを設定します。

実際に、WWW-Authenticateを送っているのは、start()関数になります。 また、認証処理もこの関数内で行われているようです。

getAuthは、認証済みかどうかを取得する関数になります。

getAuthDataは、別の項目のデータを取得するときに使用します。