用密码验证php的误区

时间:2016-05-25 05:44:51

标签: php mysqli

我试图验证用户的登录信息并比较两个密码(它们在数据库中进行哈希处理)。我很确定它只是一些我无法找到的愚蠢的错误或错误。这是我在保存到db时的哈希方式。 $password = password_hash($_POST["password"], PASSWORD_BCRYPT); 这是我的登录方法:

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

            $stmt = $mysqli->prepare("SELECT `password` FROM users WHERE username=?");
            $stmt->bind_param("s", $username);

            $username = $_POST["username"];
            $password = $_POST["password"];

            $stmt->execute();
            $stmt->bind_result($result);

            if(password_verify($password, $result)){
                header("Location: http://localhost/test2/Home.php");
            }
            else{
                echo "<script type='text/javascript'>alert('Something went wrong!')</script>";
                echo $mysqli->error;
                echo $stmt->error;
            }
        }   

出于测试目的,我尝试echo错误,但它没有显示任何内容。

2 个答案:

答案 0 :(得分:0)

忘记从查询结果中获取数据

$stmt->execute();// execute query
$stmt->bind_result($result);// bind result
    while ($stmt->fetch()) {// fetch data
        $pass = $result;
    }
    if (password_verify($password, $pass)) {
        header("Location: http://localhost/test2/Home.php");
    }

答案 1 :(得分:-1)

更改

if(password_verify($password, $result)){

if(password_verify($password, $result['password'])){