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