如何使用PHP中的password_verify保护多个用户的登录?

时间:2017-01-18 19:38:42

标签: php arrays login passwords

我想创建多个用户来输入网站(没有数据库)。

假设我在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'];
}

我的问题是,如何在不经常复制相同代码的情况下创建多个用户名和密码?

让多个用户......

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

检查多个用户......

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

有没有办法循环用户进入登录屏幕而不是多个elseif语句?

任何帮助表示感谢。

我想也许我需要将用户/传递组合放在一个数组中...(我的错误尝试)。

$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))) {}
}

但这只会无休止地复制登录表单。

谢谢,任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以将单个文件与用户一起传递,例如(您可以拥有JSON文件或其他内容):

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

然后

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

答案 1 :(得分:0)

Tania Rascia,只需做一件事,即所有用户名和密码都存储在csv文件中,并且每次登录时都可以检查输入的用户名和密码。密码确实存在于文件中。身份验证成功后,您可以设置会话。这种方法可以解决您的问题。