Pear で ベーシック認証(DB編)
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は、別の項目のデータを取得するときに使用します。