簡體   English   中英

PHP登錄頁面不適用於password_verify

[英]PHP Log in page doesn't work with password_verify

所以,我已經在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,但不幸的是,之前提出的問題都沒有為我工作。

您正在重新掃描密碼。 當您使用password_hash您沒有獲得相同字符串的相同值,因此您永遠不會找到匹配項。 您需要選擇密碼(散列),然后將原始字符串(輸入)傳遞給password_verify 所以只需在where中輸入用戶名,然后在password_verify使用結果密碼和原始字符串

嘗試呼應了password_hash相同的值(例如password_hash('test'....)你會看到,你還需要考慮使用MD5是,這是你所做過的事情。如果這是一個活的系統這將是困難的,因為你基本上需要讓每個人都在下次登錄時更改密碼或寫一些例程來更新它(例如使用舊的驗證方法然后使用password_hash()密碼並更新它。)如果這不是生產代碼,只需清除您的密碼,然后重新開始。

另外我只是注意到你說如果密碼驗證返回false,你想要記錄人員, (!password_verify...所以你的邏輯回到前面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM