[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 メーリングリストの案内