PHP登录页面不适用于password_verify

问题描述 投票:0回答:1

所以,我已经在adduser.php上创建了新帐户的密码:

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

    require "../functions/db-insert.php";
    $productcategory = [
        'username' => $_POST['username'],
        'password' => sha1($_POST['password']),
        'isadmin' => $_POST['isadmin']
    ];

    //$hash = password_hash($_POST['password'], PASSWORD_DEFAULT); 
    $category = insert($pdo, 'users', $productcategory);

    echo "<p>User added</p>";
}

现在我正在尝试修改我的login.php,以便能够使用password_verify正确签名,但我似乎做错了,因为我无法再登录。

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

if (isset($_POST["username"]) && isset($_POST["password"]))  {


    $results = $pdo->prepare("SELECT * FROM users 
               WHERE username = :username AND password = :password");

    $values = [
        ':username' => $_POST["username"],
        ':password' => $_POST['password']
    ];

    $password = $_POST['password'];
    $hash = password_hash($password, PASSWORD_DEFAULT);

    $results->execute($values);

    $row = $results->fetchAll();

    if(count($row) < 1){
        echo '<h3><strong>Wrong username or password!</h3>';
    }
    else if (!password_verify($password, $hash)){
        $_SESSION['loggedin'] = true;
        $_SESSION['name'] = $_POST['username'];
        echo "<h3>Welcome back " . $_SESSION['name'] . " !</h3>"; 
    }
  }
}

在这一点上,我不完全确定我做错了什么,如果有人可以帮我解决我做错的事情,我会非常感激。我看了很多stackoverflow,但不幸的是,之前提出的问题都没有为我工作。

php pdo hash
1个回答
0
投票

您正在重新扫描密码。当你使用password_hash时,你没有得到相同字符串的相同值,所以你永远不会找到匹配。您需要选择密码(散列),然后将原始字符串(输入)传递给password_verify。所以只需在where中使用用户名,然后使用结果密码和password_verify中的原始字符串

尝试回显相同值的password_hash(例如password_hash('test'....)。你会看到。你还需要考虑使用md5,这是你以前做过的。如果这是一个实时系统,那将很难,因为你基本上需要让每个人都更改他们的密码或写下一些例程,以便他们下次登录时更新它(例如使用旧的验证方法然后使用password_hash()密码并更新它。)如果这不是生产代码,只需清除你的密码和重新开始。

另外我只是注意到你说如果密码验证返回false,(!password_verify...你想要记录人员。所以你的逻辑回到了前面

© www.soinside.com 2019 - 2024. All rights reserved.