- Home ›
- PEAR入門 ›
- ユーザー認証(PEAR::Auth) ›
- HERE
ユーザー定義関数の引数の利用
ログインフォームを表示するためのユーザー定義関数には2つの引数が渡されてきます。1つ目は現在の認証済みのユーザー名が、2つ目は認証を行った結果を表すステータスコードが渡されてきます。
ここでスタータスコードについて見てみます。ステータスコードは何か認証時に問題があった場合に設定されます。その為、初回表示の際には認証コードには何も入っていません。
認証ステータスが取り得る値は下記の通りです。
| PHPで定義済の定数 | 実際の値 | 状態 |
|---|---|---|
| AUTH_IDLED | -1 | アイドル時間による認証切れ |
| AUTH_EXPIRED | -2 | 有効期限切れによる認証切れ |
| AUTH_WRONG_LOGIN | -3 | 認証エラー(ユーザー名又はパスワードが異なっている) |
ステータスコードを調べることで、認証が必要になった理由、又は認証が行わなかった理由を調べることができます。
サンプルプログラム
では実際に試してみます。下記ではユーザー認証に失敗した場合のメッセージを表示するようにしています。(またフォームの送信先について、自分自身のページを表す $_SERVER['PHP_SELF'] を使って今後変更しなくていいようにしています)。
<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サーバに設置しブラウザで見てみると下記のように表示されます。
ここでデータベースに登録されていないユーザー名とパスワードを入れてみます。
「クエリ送信」ボタンを押すと下記のようになります。
ユーザー名又はパスワードが間違っていたことを区別してメッセージを表示することが出来ました。
ここでは認証失敗の場合だけを試しましたが、アイドルタイムによる再認証要求や有効期限切れによる再認証要求についても別のページで確認します。
( Written by Tatsuo Ikura )
PHPBook