[PHP-users 18220]Re: PHPLIBのログインフォームを外部に持ちたい
Masato Tanaka
php @ e-linez.com
2003年 10月 2日 (木) 21:25:23 JST
ご返答ありがとうございます。
肝心のバージョンを記載しておりませんでした。
こちらのバージョンは以下の通りです。
Apache-1.3.26
PHP-4.3.2
PHPLib
(バージョンは判らないですが、ペンギン本に載っているもので、廣川さんの
パッチ済みのものです。)
>
> 一部訂正させてください。
> 「auth_validatelogin() メソッドは、ただfalseをリターンするだけにする」
> というのは誤りです。
> 動いていたときのように、auth_validatelogin()にもログインチェック用のコード
を
> 入れておく必要がありました。
> ウソ情報を流し、申し訳ありません
>
> auth_preauth()が呼ばれるのは、ほんとの初回アクセス時のみで、
> それ以降はコールされません。
> なので、初回に認証が通らないと、いつも通りauth_validatelogin()内で
> ログインチェックが行われます。
>
> なので、一番簡単なのは、auth_validatelogin()を以前の状態に戻し、
> auth_preauth()内では、auth_validatelogin()メソッドをコールして、
> その戻り値をリターンしてやるという手法でしょうか。
貴重なお時間を割いていただきありがとうございます。
同じように試みてみましたが、いまだ、loginform.ihtmlが読み込まれて
しまっております。auth_preauth()がfalseを返していると思われるのですが。
シーラカンス本のPgimageというプログラムを改造していますので、
パスワードがMD5で暗号化されていたりと若干改造されているのものなので、
まだ、足りない部分があるのかもしれません。
おかげさまで、ログイン認証のプロセスが理解できて来ましたので、もう少し、
理解していじってみようと思います。
田中
---------- class Pgimage_Auth extends Auth の一部のみ
function auth_loginform() {
global $sess;
global $challenge;
$challenge = md5(uniqid($this->magic));
$sess->register("challenge");
include("pgimage_login.ihtml");
}
function auth_preauth () {
return $this->auth_validatelogin ();
}
function auth_validatelogin() {
global $HTTP_POST_VARS;
if (isset($HTTP_POST_VARS["username"])) {
$username = $HTTP_POST_VARS["username"];
}
if (isset($HTTP_POST_VARS["password"])) {
$password = $HTTP_POST_VARS["password"];
}
if (isset($HTTP_POST_VARS["challenge"])) {
$challenge = $HTTP_POST_VARS["challenge"];
}
if (isset($HTTP_POST_VARS["response"])) {
$response = $HTTP_POST_VARS["response"];
}
$this->auth["uname"]=$username; ## This provides access for
"loginfor
m.ihtml"
$this->db->query(sprintf("select user_id,perms,password ".
"from %s where username = '%s'",
$this->database_table,
addslashes($username)));
while($this->db->next_record()) {
$uid = $this->db->f("user_id");
$perm = $this->db->f("perms");
$pass = $this->db->f("password"); ## Password is stored as a md5
hash
}
//print("== $username == $password == $pass == $challenge");
$expected_response = md5("$username:$pass:$challenge");
## True when JS is disabled
if ($response == "") {
if (md5($password) != $pass) { ## md5 hash for non-JavaScript
browse
rs
return false;
} else {
$this->auth["perm"] = $perm;
return $uid;
}
}
## Response is set, JS is enabled
if ($expected_response != $response) {
//print ("=== $expected_response === === $response ===");
return false;
} else {
$this->auth["perm"] = $perm;
return $uid;
}
}
PHP-users メーリングリストの案内