導入

導入 -- 使用例

Authについてのチュートリアル

この"ミニチュートリアル"では、 簡単な認証機構を利用してシステムを構築し、 サイトをセキュアにすることを目標とします。

セキュアにしたいサイトのはじめに、以下の短いコードを置いてください。

例 28-1PEAR::Authの典型的な使用例


<?php
require_once "Auth/Auth.php";

function loginFunction()
{
    /**
     * HTML出力は、作成するアプリケーションに合うように、
     * 変更してください。
     */
    echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
    echo "<input type=\"text\" name=\"username\">";
    echo "<input type=\"password\" name=\"password\">";
    echo "<input type=\"submit\">";
    echo "</form>";
}

$dsn = "mysql://user:password@localhost/database";
$a = new Auth("DB", $dsn, "loginFunction");

$a->start();

if ($a->getAuth()) {
    /**
     * サイトの出力はここ。
     */
}
?>

このような短いコードでも、認証システムを実現できています。

最初の行では、PEARディレクトリからファイルを読み込んでいます。 そのファイルには、PEAR::Auth の実行に必要なコードが全て含まれています。 次に、ページの閲覧者がログインデータを入力するために使用する ログインフォームを表示する関数を定義します。 この関数のHTML フォーマットは自由に変更することが出来ます。

警告

関数中のHTMLフォーマットは自由に変更できますが、 入力欄の名称は変更してはいけません。 それらは、 usernameおよびpassword とする必要があります。

この例では、ログインデータの検証にデータベースを使用するので、 変数$dsnを作成します。 この変数には、 PEAR::DB によるデータベース接続に使われる有効なDSN文字列を指定します。 デフォルトのテーブルスキーマについて、および データベース以外のストレージコンテナを使用する方法については、 後述の説明を参照下さい。

その後、認証オブジェクトを作成します。 はじめの引数には、ストレージコンテナ名を指定します。 ここでは、データベースによるストレージコンテナを使用するので、 "DB"を渡します。 2番目には、使用するストレージコンテナのドライバへの コネクション引数です。 ここでは、定義済のDSN文字列を使います。 3番目の引数は、ログインフォームを表示する関数名です。

ついで、認証オブジェクトを初期化します。そして、 ユーザがログインしているかどうか調べる必要があります。 これは、getAuth()メソッドにより行います。 TRUEが返されると、ページの内容をユーザに示すことができます。

警告

現在のところ、register_globals=onの場合、以下のコードは使用できません。


<?php
$auth = new Auth(...);
?>

その理由は、$authが、PEAR::Auth内部で使用されている セッション変数名であるためです。

例 28-2認証の選択的な使用


<?php
require_once "Auth/Auth.php";

function loginFunction()
{
     /**
      * HTML出力は、作成するアプリケーションに合うように、
      * 変更してください。
      */
     echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "?login=1\">";
     echo "<input type=\"text\" name=\"username\">";
     echo "<input type=\"password\" name=\"password\">";
     echo "<input type=\"submit\">";
     echo "</form>";
}

if (isset($_GET['login']) && $_GET['login'] == 1) {
     $optional = true;
} else {
     $optional = false;
}

$dsn = "mysql://user:password@localhost/database";
$a = new Auth("DB", $dsn, "loginFunction", $optional);

$a->start();

echo "すべての人がこのテキストを読めます。<br />";

if (!isset($_GET['login'])) {
     echo "<a href=\"test.php?login=1\">ログイン</a>\n";
}

if ($a->getAuth()) {
     echo "ログインした人だけが、ここを見れます。";
}
?>

上記は、ログイン機能を選択的に使用する例です。 最後の$optionalパラメータは、 TRUEまたはFALSEとします。 FALSEとした場合、ログインフォームは表示されず、 ユーザは「すべての人がこのテキストを読めます。」 の文だけを見ることができます。 もし、ユーザがこのページ上部のリンクをクリックすると、 GETパラメータが"login=1"となって、同じページに接続します。 今回は、ログイン情報をログインフォームに入力できます。 ログインに成功すると、 「すべての人がこのテキストを読めます。」の文と 「ログインした人だけが、ここを見れます。」 の文の両方を見ることができます。

例 28-3ログアウト機能

以下の例では、現在のユーザをログアウトさせ、 ログインフォームを再び表示します。


<?php
if ($_GET['action'] == "logout" && $myauth->checkAuth()) {
    $myauth->logout();
}
$myauth->start();
?>

以下では、PEAR::Authの機能についての 詳細を示します。

次のSQL文は、MySQLを使用して、 データベース認証用のデフォルトのスキームを作成します。

CREATE TABLE auth (
   username VARCHAR(50) default '' NOT NULL,
   password VARCHAR(32) default '' NOT NULL,
   PRIMARY KEY (username),
   KEY (password)
);

認証を機能させるために必要なテーブル名とフィールド名が示されています。 PEAR::Auth のデフォルトの暗号化方式である MD5 アルゴリズムでパスワードのハッシュ値を計算する場合、 password カラムは、32文字以上とする必要があります。 他の暗号化方式、たとえばDES ("UNIX crypt") など、を使用する場合は、 それに合わせてカラムサイズを変更する必要があります。