Auth で 認証[Pear::Auth]

Pear の中に Auth というパッケージがあります。 このパッケージを利用することでユーザー認証や認証用のフォームを作成することができます。 Authは、ストレージドライバを変えることで、認証管理をDBやファイル、POP3等さまざまな ユーザー管理に対応できます。

Auth で MySQL を使った認証

ユーザーの情報の保持をMySQLのテーブルで行った場合の処理です。

ユーザーの追加

<?php

require_once "Auth/Auth.php";

// Authオプション
$params = array(
'dsn'=>"mysql://username:password@localhost/database",
'table'=>"usermng",                                    // テーブル名 
'usernamecol'=>"username",                             // ユーザ名の列名
'passwordcol'=>"password",                             // パスワードの列名
'cryptType'=>"md5",                                    // パスワードの暗号化形式
);

$objAuth = new Auth("DB", $params);

// ユーザーの追加
if($objAuth->addUser('user','pass')) {
    echo "ユーザーを追加しました。";
}

?>

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

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

次にaddUser関数でユーザー名とパスワードを登録します。

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

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

他の項目に追加情報を登録したい場合、次のように連想配列で指定します。

$useropts = array('email'=>'hoge@hoge.com');
$objAuth->addUser('user','pass',$useropts);

認証処理

Auth を使ったもっとも単純な認証処理を行います。

<?php

require_once "Auth/Auth.php";

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

$objAuth = new Auth("DB", $params);

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

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

?>

インスタンス化するまでは、ユーザー登録と同様です。 ここでは、ユーザー管理テーブルからemail項目の値も取得するため db_Fieldsをオプションで指定しています。

start関数で、認証フォームの表示及び認証を行います。 フォームのname属性は、username,passwordの固定になります。

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

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