我目前遇到以下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哈希值。
有人可以帮我找到问题吗?
答案 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';
}