如果满足if语句,则登录页面上的语句无法继续

时间:2012-12-22 10:26:28

标签: php if-statement login bcrypt

我目前遇到以下php代码的问题:

if ($result['username'] == $_POST["name"]) {
        $bcrypt = new Bcrypt(10);
        $password = $_POST["password"];
        $hashdb = $result['password'];

        $hash = $bcrypt->hash($password);
        $isGood = $bcrypt->verify($password, $hashdb);

        if ($isGood == 1) {

            if($result['active'] == 1) {

                $_SESSION["login"] = $result['firstname']." ".$result['lastname'];
                $_SESSION["functionlevel"] = $result['functionlevel'];

                header("location:startpagina.php");
            } else {
                echo 'Account blocked or not activated';
            }


        } else {
            echo 'Password not correct';
        }

}  else {
    echo 'Username not correct';
}

我使用Andrew Moore bcrypt class进行散列并验证密码。 出于某种原因,我的if语句似乎失败并在第二个if语句后突然停止。如果此失败则显示密码不正确选项。但如果确实如此,则不会继续到第三个if

我在第二个if尝试了不同的选项,如:

if ($isGood){

if ($isGood == true){

if ($isGood !== false){

if ($isGood !== 0){

但不知何故,如果声明得到满足,这些似乎都不会继续下去。 它只是再次显示登录页面而不是继续startpagina.php。 登录页面工作正常,没有bcrypt实现,只需检查两个md5哈希值。

有人可以帮我找到问题吗?

1 个答案:

答案 0 :(得分:0)

你的$ isGood总是假的 - 因为你没有正确验证哈希。

更改

    $hash = $bcrypt->hash($password);
    $isGood = $bcrypt->verify($password, $hashdb);

    $hash = $bcrypt->hash($_POST["password"]);
    $isGood = $bcrypt->verify($hashdb, $hash);

这就是我写它的方式

if ($result['username'] == $_POST["name"]) {
        $bcrypt = new Bcrypt(10);

        if ($bcrypt->verify($result['password'], $bcrypt->hash($_POST["password"]))) {

            if($result['active']) {

                $_SESSION["login"] = $result['firstname']." ".$result['lastname'];
                $_SESSION["functionlevel"] = $result['functionlevel'];

                header("location:startpagina.php");
                exit();
            } else {
                echo 'Account blocked or not activated';
            }
        } else {
            echo 'Password not correct';
        }

}  else {
    echo 'Username not correct';
}