Auth で 独自認証フォーム[Pear::Auth]

PearAuthは、ユーザー認証や認証用のフォームを作成することまでできますが、 独自の認証フォームを使用することもできます。

<?php

require_once "Auth/Auth.php";

function drawLogin($username, $status, $objAuth) {
    if (isset($_SERVER)) {
        $server = $_SERVER;
    }
    else {
        $server = $GLOBALS['HTTP_SERVER_VARS'];
    }
    echo '<form method="post" action="' . $server['PHP_SELF'] . '">' . "\n";
    echo '<label for="username">ユーザー名:</label>';
    echo '<input type="text" name="username">' . "\n";
    echo '<label for="password">パスワード:</label>';
    echo '<input type="password" name="password">' . "\n";
    echo '<input type="submit" value="ログイン">' . "\n";
    echo '</form>' . "\n";
}


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

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

$objAuth->start();

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

?>

まず、ログイン用のフォーム(HTML)を出力する関数を作成します。 ここでのポイントは、ユーザーとパスワードの入力用要素のname属性は、usernamepassword でなくてはいけないと言う事です。

次に、コンストラクタの引数にログイン用のフォーム(HTML)を出力する関数をコールバック関数として渡します。 受け取れる値は、ユーザー名、ステータス、Authオブジェクトになります。

ステータスとして定義されている定数は、次のようになります。

AUTH_IDLED
設定されたセッション待機時間が経過した
AUTH_EXPIRED
設定されたセッション持続時間が経過した
AUTH_WRONG_LOGIN
ユーザー名又はパスワードエラー

ログインの状態は、セッション情報に保持されます。 デフォルトでは、セッション内に_authsessionという配列を作成します。