Проверьте правильность phpass на моей существующей странице входа

Я пытаюсь добавить Phpass на свой веб-сайт, но независимо от того, что я делаю, я не могу получить логическое значение $ check, возвращающее true, чтобы я мог фактически войти в систему. Пока мне удалось зашифровать свой пароль и сохранить его в базе данных, но проверка на это не удается.

<?php

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

$EM = $_POST['Email'];

// Password from form input
$PW = $_POST["Password"];

// Passwords should never be longer than 72 characters to prevent DoS attacks
if (strlen($PW) > 72) { die("Password must be 72 characters or less"); }

// Just in case the hash isn't found
$stored_hash = "*";

// Retrieve the hash that you stored earlier
$stored_hash = "this is the hash we stored earlier";

// Check that the password is correct, returns a boolean
$check = $hasher->CheckPassword($PW, $stored_hash);

if ($check) {
// passwords matched! show account dashboard or something

$result = $con->query("select * from user where Email='$EM' AND Password='$PW'");

$row = $result->fetch_array(MYSQLI_BOTH);

session_start();

$_SESSION["UserID"] = $row['UserID'];

header('Location: Account.php');} else {

// passwords didn't match, show an error
header('Location: Fail.php');
}}

Потому что я пытался добавить к существующему логину, мне интересно, есть ли у меня лишний код, который просто ломает его? Или, может быть, я просто испортил все это вместе, поскольку независимо от того, что я пытаюсь при входе в систему, единственное, что загружается

header('Location: Fail.php');:|

Заранее спасибо!

Изменить: Хорошо, у меня есть файл реестра, который сохраняет хешированный пароль в базу данных:

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

session_start();
$FName  = $_POST['First_Name'];
$LName  = $_POST['Last_Name'];
$Email  = $_POST['Email'];

// In this case, the password is retrieved from a form input
$PW = $_POST["Password"];

// Passwords should never be longer than 72 characters to prevent DoS attacks
if (strlen($PW) > 72) { die("Password must be 72 characters or less"); }

// The $hash variable will contain the hash of the password
$hash = $hasher->HashPassword($PW);

if (strlen($hash) >= 20) {

// Store the hash somewhere such as a database
// The code for that is up to you as this tutorial only focuses on hashing passwords
$sql = $con->query("INSERT INTO user (Fname, Lname, Email, Password)Values('{$FName}','{$LName}', '{$Email}', '{$hash}')");

} else {

// something went wrong

}

echo $hash;

//  $StorePassword = password_hash($PW, PASSWORD_BCRYPT, array('cost' => 10));header('Location: Login.php'); //Redirect here when registering

А потом я хочу прочитать его из базы данных, сравнить с введенным паролем и т. Д.

Как мне получить эту информацию из базы данных mysqli, чтобы сравнить ее? и, надеюсь, заставить это работать?

Это учебник, которому я следовал: https://sunnysingh.io/blog/secure-passwords

1

Решение

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

$EM = $_POST['Email'];

// Password from form input
$PW = $_POST["Password"];

// Passwords should never be longer than 72 characters to prevent DoS attacks
if (strlen($PW) > 72) { die("Password must be 72 characters or less"); }

$result = $con->query("select * from user where Email='$EM'");

$row = $result->fetch_array(MYSQLI_BOTH);

if ($row) {

// Check that the password is correct, returns a boolean
$check = $hasher->CheckPassword($PW, $row['Password']);

if ($check) {
// passwords matched! show account dashboard or something

session_start();

$_SESSION["UserID"] = $row['UserID'];

header('Location: Account.php');
exit;
}
}

// passwords didn't match, show an error
header('Location: Fail.php');

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]