登录脚本:两个if语句

时间:2015-04-20 08:26:56

标签: php database hash mysqli password-hash

此代码正常工作,直到用户注册后开始哈希密码。我正在使用标准功能

password_hash()

这会在users表中隐藏我的密码。但是,我发现如果没有其他功能验证他们输入了正确的密码,他们就无法登录。它告诉我,我必须在这样的语句中使用password_verify。

if (password_verify($password, $hash)) {
// Success!
}
else {
// Invalid credentials
}

但是我的登录脚本中已经有了if语句,我不知道如何将两者结合起来。我试过这个:

if(isset($_POST['Login']) && (password_verify($password, $hash))){

但这也不起作用。 有人可以给我一个关于我能做什么的建议吗?这是我的整个登录脚本(我已经连接到DB),我只需要为哈希密码添加if语句。

if(isset($_POST['Login'])){


$Username = mysqli_real_escape_string($con,$_POST['Username']);
$UserPassword = mysqli_real_escape_string($con,$_POST['UserPassword']);
$sel_user = "select * from users where Username='$Username' AND UserPassword='$UserPassword'";
$run_user = mysqli_query($con, $sel_user);
$check_user = mysqli_num_rows($run_user);

    if($check_user>0){
        session_start();
$_SESSION['Username']=$Username;

header('Location: index.php');
}

else {
            header('Location: login.php');
            echo "<p>". "Wrong password or username" . "</p>";

}
}

1 个答案:

答案 0 :(得分:1)

您应该使用存储在数据库中的哈希来检查用户提供的密码。 所以你必须做这样的事情:

if (isset($_POST['login']) {
   //check for if password is provided
   //some code to verify user login in database and if exists get password      
   //hash for this login like this
   $query = mysqli_query($con,"select hash from users where   
   username=".$login); //or some error proccessing
   if (mysqli_num_rows($query) == 0) {
     //incorrect login proccesing
   }
   $hash = mysqli_fetch_assoc($query)['hash'];
   if (!password_verify($password,$hash)) {
    //wrong passsword proccesing
   }
}