簡體   English   中英

無法使用先前通過注冊查詢創建的哈希密碼無法登錄的用戶

[英]Cant login user with hash password previously created with signup query

我還是個菜鳥。 我正在嘗試使用先前在注冊查詢中創建的hash_password登錄用戶。 我一直在這里逛逛,但我想我不明白它是如何工作的,需要幫助來理解它。

signup.php

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

// set parameters and insert in users table  
$date_now = date('Y-m-d H:i:s');
$user_level =$_POST['user_level'];
$username = $_POST['username'];
$password = $_POST['password'];
$email =  $_POST['email'];

//Store $hashedPassword in the database under the password column.
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

// prepare and bind // users table
$user = $db->prepare("INSERT INTO users (username, password, email,created) VALUES (?, ?, ?,?)");
$user->bind_param("ssss", $username,$hashedPassword, $email,$date_now);
$user->execute();

}

login.php

 if($_SERVER["REQUEST_METHOD"] == "POST") {

     $myusername = mysqli_real_escape_string($db,$_POST['username']);
      $mypassword = mysqli_real_escape_string($db,$_POST['password']); 
       $hashedPassword = "SELECT id FROM users WHERE username = '$myusername' and  password = '$mypassword'";


      $result = mysqli_query($db,$hashedPassword);
      $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
      $active = $row['active'];

      $count = mysqli_num_rows($result);

      // If result matched $myusername and $mypassword, table row must be 1 row

      if($count == 1 && (password_verify($mypassword,$hashedPassword))) {

         $_SESSION['login_user'] = $myusername;

         header("location: user/adminhome.php");
      }else {
         $error = "Your Login Name or Password is invalid";
      }

}
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
$hashedPassword = password_hash($password);
$query = "SELECT id FROM users WHERE username = '$username' and  password = '$hashedPassword'";

$result = mysqli_query($db, $query);

將您的login.php代碼替換為以下內容。 我對您的代碼做了一些調整。 希望它會起作用。 確保仔細檢查差異。 :)

 <?php
 session_start();

 if($_SERVER["REQUEST_METHOD"] == "POST") {

    $myusername = mysqli_real_escape_string($db,$_POST['username']);
    $mypassword = $_POST['password'];           // no need to real escape this

    // query for getting hashed password for the $myusername
    $hashedPasswordQry = "SELECT password FROM users WHERE username = '$myusername'";


    $result = mysqli_query($db,$hashedPasswordQry);
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
    $active = $row['active'];

    $count = mysqli_num_rows($result);

    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count == 1 && (password_verify($mypassword, $row['password']))) {

        $_SESSION['login_user'] = $myusername;
        header("location: user/adminhome.php");

    }else {

     $error = "Your Login Name or Password is invalid";

    }

}

暫無
暫無

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

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