ユーザー定義関数の引数の利用

広告

ログインフォームを表示するためのユーザー定義関数には2つの引数が渡されてきます。1つ目は現在の認証済みのユーザー名が、2つ目は認証を行った結果を表すステータスコードが渡されてきます。

ここでスタータスコードについて見てみます。ステータスコードは何か認証時に問題があった場合に設定されます。その為、初回表示の際には認証コードには何も入っていません。

認証ステータスが取り得る値は下記の通りです。

PHPで定義済の定数実際の値状態
AUTH_IDLED-1アイドル時間による認証切れ
AUTH_EXPIRED-2有効期限切れによる認証切れ
AUTH_WRONG_LOGIN-3認証エラー(ユーザー名又はパスワードが異なっている)

ステータスコードを調べることで、認証が必要になった理由、又は認証が行わなかった理由を調べることができます。

サンプルプログラム

では実際に試してみます。下記ではユーザー認証に失敗した場合のメッセージを表示するようにしています。(またフォームの送信先について、自分自身のページを表す $_SERVER['PHP_SELF'] を使って今後変更しなくていいようにしています)。

sample7-1.php

<html>
<head>
<title>PHP認証テスト</title>
</head>
<body>
<?php

require_once "Auth/Auth.php";

function loginFunction($username, $status){
    if ($status == AUTH_WRONG_LOGIN){
        print("ユーザー名又はパスワードが間違っています<br>");
    }

    print("<form method=¥"post¥" action=¥"".$_SERVER['PHP_SELF']."¥">");
    print("<table>");
    print("<tr>");
    print("<td>ユーザー名</td>");
    print("<td><input type=¥"text¥" name=¥"username¥"></td>");
    print("</tr>");
    print("<tr>");
    print("<td>パスワード</td>");
    print("<td><input type=¥"password¥" name=¥"password¥"></td>");
    print("</tr>");
    print("<tr>");
    print("<td colspan=¥"2¥"><input type=¥"submit¥"></td>");
    print("</tr>");
    print("</table>");
    print("</form>");
}

$params = array(
    "dsn" => "mysqli://authuser:authpass@localhost/authdb",
    "table" => "authtable",
    "usernamecol" => "username",
    "passwordcol" => "password"
);

$authobj = new Auth("DB", $params, "loginFunction");

$authobj->start();

if ($authobj->getAuth()){
    print("認証済みです");
}
?>

</body>
</html>

上記をWWWサーバに設置しブラウザで見てみると下記のように表示されます。

PEAR::AUTHでのユーザー定義関数

ここでデータベースに登録されていないユーザー名とパスワードを入れてみます。

PEAR::AUTHでのユーザー定義関数

「クエリ送信」ボタンを押すと下記のようになります。

PEAR::AUTHでのユーザー定義関数

ユーザー名又はパスワードが間違っていたことを区別してメッセージを表示することが出来ました。

ここでは認証失敗の場合だけを試しましたが、アイドルタイムによる再認証要求や有効期限切れによる再認証要求についても別のページで確認します。

( Written by Tatsuo Ikura )