Auth_Container_Multiple

Auth_Container_Multiple -- 複数の Auth_Container に対する認証を行う

Multiple コンテナ

このコンテナは、複数の Auth_Container に対して順に認証を試みるコンテナです。

コンテナの getAuthData() が true を返すと、 Auth_Container_Multiple は true を返します。

コンテナの getAuthData() が false を返すと、 Auth_Container_Multiple はリスト内の次のコンテナで処理を続けます。 ログインが成功するか、すべてのコンテナを処理し終えるまで処理を続けます。

getAuthData() でエラーが発生した場合は、 Auth_Container_Multiple はそれ以降の処理をせず、そこでエラーを返します。

Auth コンストラクタ() へのストレージ固有の引数は、コンテナ設定の配列で指定します。 コンテナ設定は、以下のようなオプションで指定します。

表 34-1使用可能なオプション

オプションデータ型デフォルト値説明
"type" string "" インスタンスを作成するコンテナの型。これは、 Auth コンストラクタ() の最初の引数で指定するものと同じ値です。
"options" array array() そのコンテナが必要とするオプションの配列。

例 34-1Auth_Container_Multiple の使用例

require_once "Auth.php";
require_once 'Log.php';
require_once 'Log/observer.php';

// ログイン画面を表示するコールバック関数
function loginFunction($username = null, $status = null, &$auth = null)
{
	/*
	 * HTML 出力を変更し、作成するアプリケーションに
	 * あわせるようにします
	 */
	echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">";
	echo "ユーザ名: <input type=\"text\" name=\"username\"><br/>";
	echo "パスワード: <input type=\"password\" name=\"password\"><br/>";
	echo "<input type=\"submit\">";
	echo "</form>";
}

class Auth_Log_Observer extends Log_observer {

	var $messages = array();

	function notify($event) {

		$this->messages[] = $event;

	}

}

$options = array(
	'enableLogging' => true,
	array(
		'type' => 'Array',
		'options' => array(
			'cryptType' => 'md5',
			'users' => array(
				'guest' => md5('password'),
			),
		),
	),
	array(
		'type' => 'Array',
		'options' => array(
			'cryptType' => 'md5',
			'users' => array(
				'admin' => md5('password'),
			),
		),
	),
);
$a = new Auth("Multiple", $options, "loginFunction");

$infoObserver = new Auth_Log_Observer(PEAR_LOG_INFO);

$a->attachLogObserver($infoObserver);

$debugObserver = new Auth_Log_Observer(PEAR_LOG_DEBUG);

$a->attachLogObserver($debugObserver);

$a->start();

if ($a->checkAuth()) {
	/*
	 * サイトに出力する内容をここに書きます
	 */
	print "認証に成功しました。<br/>";
}

print '<h3>ログ出力</h3>'
	.'<b>PEAR_LOG_INFO レベルのメッセージ</b><br/>';

foreach ($infoObserver->messages as $event) {
	print $event['priority'].': '.$event['message'].'<br/>';
}

print '<br/>'
	.'<b>PEAR_LOG_DEBUG レベルのメッセージ</b><br/>';

foreach ($debugObserver->messages as $event) {
	print $event['priority'].': '.$event['message'].'<br/>';
}

print '<br/>';

注意

このコンテナは、バージョン 1.5.0 以降でのみ使用可能です。