1

こんにちは、仲間のプログラマーとコーダー。zubragによるすでに優れたログインスクリプトに基づいて、拡張ログインスクリプトを開発しています。

私が達成しようとしていること:ユーザーが管理者の場合、彼はログインします。ユーザーが通常のユーザーの場合、彼はログインしません。

何が起こるか:ユーザーは、管理者でなくてもログインします。

コードの抜粋は次のとおりです。

// user provided password
if (isset($_POST['access_password'])) {

  $login = isset($_POST['access_login']) ? $_POST['access_login'] : '';
  $pass = $_POST['access_password'];
  if (!USE_USERNAME && !in_array($pass, $users)
  || (USE_USERNAME && ( !array_key_exists($login, $users) || $users[$login] != $pass ) ) 
  ) {
      showLoginPasswordProtect("Incorrect username or password.");
  }

私が問題を抱えている部分:

  elseif (array_key_exists($login, $admins)) {
  showLoginPasswordProtect("User not an admin.");
  }

残りのコード:

  else {
      // set cookie if password was validated
      setcookie("verify", md5($login.'%'.$pass), $timeout, '/');
      setcookie("user", $login, 0, '/');
      // Some programs (like Form1 Bilder) check $_POST array to see if parameters passed
      // So need to clear password protector variables
      unset($_POST['access_login']);
      unset($_POST['access_password']);
      unset($_POST['Submit']);
  }

}

ユーザー名とパスワードの配列:

$users = array(
  'username' => 'password',
  'administrator' => 'administrator-password'
);

管理アレイ:

$admins = array(
  'administrator'
);

それをすべて一緒に想像してみてください。問題は何でしょうか。(おそらく本当に簡単です。私はプロのコーダーではありません。)

4

1 に答える 1

4

管理者がログインできることを確認しますか?

ここでは、ユーザー名がadmin配列にある場合は、アクセスを拒否すると言っています。

elseif (array_key_exists($login, $admins)) {
  showLoginPasswordProtect("User not an admin.");
}

  おそらくやりたいことは、admin配列にないユーザーのアクセスを拒否することです。

elseif (!array_key_exists($login, $admins)) {
  showLoginPasswordProtect("User not an admin.");
}
于 2012-12-25T21:59:52.923 に答える