2017-01-18 4 views
1

サイトを入力するために複数のユーザーを作成する必要があります(データベースなし)。PHPでpassword_verifyを使用して複数のユーザーとのログインを保護するにはどうすればよいですか?

たとえば、PHPでユーザとパスワードの組み合わせをpassword_hashで生成したとします。 (方法が見つかりましたhere

$userhash = password_hash('exampleusername', PASSWORD_BCRYPT, $useroptions); 
$passhash = password_hash('examplepass', PASSWORD_BCRYPT, $pwoptions); 

私はハッシュファイルをどこかに保存しました。

$hasheduser = file_get_contents("private/user"); 
$hashedpass = file_get_contents("private/pass"); 

フォームから$_POSTのハッシュに対してユーザー名とパスワードの組み合わせを設定します。

$userhash = password_hash($_POST['user'], PASSWORD_BCRYPT, $useroptions); 
$passhash = password_hash($_POST['pass'], PASSWORD_BCRYPT, $pwoptions); 

ユーザー/パスのコンボが正しい場合、セッションが設定され、確認されます。

if (
    (password_verify($_POST['user'], $hasheduser)) 
    && (password_verify($_POST['pass'], $hashedpass)) 
) { 
    session_start();  
    $_SESSION['validuser'] = $_POST['user']; 
} 

私の質問は、同じコードを常に複製せずに複数のユーザー名とパスワードを作成するにはどうすればよいですか?

if (
    (password_verify($_POST['user'], $hasheduser)) 
    && (password_verify($_POST['pass'], $hashedpass)) 
) elseif (
    (password_verify($_POST['user'], $hasheduser2)) 
    && (password_verify($_POST['pass'], $hashedpass2)) 
) 

ではなく、複数のelseif文のログイン画面を入力するユーザーをループする方法はあります...

$hasheduser = file_get_contents("private/user"); 
$hashedpass = file_get_contents("private/pass"); 
$hasheduser2 = file_get_contents("private/user2"); 
$hashedpass2 = file_get_contents("private/pass2"); 

は、複数のユーザを確認しています...複数のユーザーを作りますか?

助けてください。

おそらく私は、ユーザ/パスのコンボを配列に入れる必要があると思っています...(誤った試みです)。

$users = array(
    file_get_contents("private/user1") => file_get_contents("private/pass1"), 
    file_get_contents("private/user2") => file_get_contents("private/pass2") 
); 

foreach ($users as $key => $value) { 
    if ((password_verify($username, $key)) && (password_verify($pass,$value))) {} 
} 

しかし、ログインフォームは無限に複製されます。

ありがとうございました、ありがとうございました。

+0

追記:理由として、特定の理由がありますあなたはデータベースを使用していませんか? –

+0

具体的な理由はなく、3人または4人のユーザーしかいないことになります。 –

+0

)なぜデータベースではないのですか?データベースを使用します。それがデータベースの目的です。 b)なぜユーザー名をハッシュしていますか? c)htaccessで 'private'を保護しない限り、誰でもハッシュデータを取得できます。それは良いことではありません。 d)*関数*について聞いたことがありますか? e)データ(またはjson_encodeの例)をシリアル化して* one *ファイルに格納すると、多くの問題を解決できます。 –

答えて

1

あなたはユーザーと1つのファイルを持っていると同じように、渡すことができます(あなたはJSONファイルやwhatheverを持つことができます):

$usersInfo = array(
    "userhash1" => "passwordhash1" 
    "userhash2" => "passwordhash2", 
); 

その後

if(isset($usersInfo[$userhash]) && $usersInfo[$userhash] === $passhash) 
{ 
    //Successful login 
    session_start();  
    $_SESSION['validuser'] = $_POST['user']; 
} 
+0

ありがとう、JSONファイルを作成し、それをデコードし、foreachループに入れてuserpassとuserpassをテストし、そのif文を使用しました。 –

0

Tania Rascia、すべてのユーザー名とパスワードがcsvファイルに保存されます。すべてのログイン時に、入力されたユーザー名がファイルに存在するかどうかを確認できます。&認証に成功すると、セッションを設定できます。この方法で問題を解決できます。

関連する問題