[PHP-users 18212]Re: PHPLIBのログインフォームを外部に持ちたい
Toshikazu Yoshikawa
toshi @ uncut00.com
2003年 10月 2日 (木) 18:53:01 JST
お世話になっております。
吉川@アンカットです。
> > 田中さんの要望を実現するには、
> > auth_validatelogin()メソッドに書いてあるログインチェック用のコードを
> > auth_preauth()メソッドにそっくり移せばいいと思います。
> > で、auth_validatelogin()メソッドはただfalseをリターンするだけにします。
一部訂正させてください。
「auth_validatelogin() メソッドは、ただfalseをリターンするだけにする」
というのは誤りです。
動いていたときのように、auth_validatelogin()にもログインチェック用のコードを
入れておく必要がありました。
ウソ情報を流し、申し訳ありません
auth_preauth()が呼ばれるのは、ほんとの初回アクセス時のみで、
それ以降はコールされません。
なので、初回に認証が通らないと、いつも通りauth_validatelogin()内で
ログインチェックが行われます。
なので、一番簡単なのは、auth_validatelogin()を以前の状態に戻し、
auth_preauth()内では、auth_validatelogin()メソッドをコールして、
その戻り値をリターンしてやるという手法でしょうか。
> 早速、試してみましたが、ログインできず、通常のログインフォームが表示されてし
> まいます。
田中さんがどのバージョンおよび、どのようなコードを書かれているのか分かりませんが、
私の環境では以下のコードで動いています。
Slackware-9.0
Apache-1.3.27
PHP-4.3.1
PHPLib-7.2d
---------- prepend.php
<?php
$_PHPLIB = array();
$_PHPLIB["libdir"] = "/usr/local/lib/phplib/";
require($_PHPLIB["libdir"] . "ct_file.inc");
require($_PHPLIB["libdir"] . "session.inc");
require($_PHPLIB["libdir"] . "auth.inc");
require("local.inc");
require($_PHPLIB["libdir"] . "page.inc");
?>
---------- local.inc
<?php
class My_CT_File extends CT_File {
var $file_path = "sess/";
}
class My_Session extends Session {
var $classname = "My_Session";
var $mode = "cookie";
var $lifetime = 0;
var $that_class = "My_CT_File";
var $gc_probability = 5;
var $allowcache = "no";
}
class My_Auth extends Auth {
var $classname = "My_Auth";
var $lifetime = 0;
var $id = 'testuser';
var $pass = 'testpass';
function auth_loginform () {
include ("loginform.ihtml");
}
function auth_preauth () {
return $this->auth_validatelogin ();
}
function auth_validatelogin () {
$uid = false;
if ($_POST["id"] == $this->id && $_POST["pass"] == $this->pass)
$uid = 'hogehoge';
return $uid;
}
}
?>
---------- loginform.ihtml
<html>
<body>
<form action="index.php" method="POST">
ID <input type="text" name="id"><br>
PASS <input type="password" name="pass"><br>
<input type="submit" value="login">
</form>
</body>
</html>
---------- index.php
<?php
include ("prepend.php");
page_open (array ("sess" => "My_Session", "auth" => "My_Auth"));
?>
認証されました
<?php
page_close ();
?>
そして、クライアントのローカルディスク上に、
以下のlogin.htmというファイルを用意し、
こちらのフォームから直接ログインできます。
---------- login.htm
<html>
<body>
<form action="http://サーバ名/path/to/index.php" method="POST">
ID <input type="text" name="id"><br>
PASS <input type="password" name="pass"><br>
<input type="submit" value="login">
</form>
</body>
</html>
ご参考になれば幸いです。
--
Toshikazu Yoshikawa <toshi @ uncut00.com>
PHP-users メーリングリストの案内