此代码正常工作,直到用户注册后开始哈希密码。我正在使用标准功能
password_hash()
这会在users表中隐藏我的密码。但是,我发现如果没有其他功能验证他们输入了正确的密码,他们就无法登录。它告诉我,我必须在这样的语句中使用password_verify。
if (password_verify($password, $hash)) {
// Success!
}
else {
// Invalid credentials
}
但是我的登录脚本中已经有了if语句,我不知道如何将两者结合起来。我试过这个:
if(isset($_POST['Login']) && (password_verify($password, $hash))){
但这也不起作用。 有人可以给我一个关于我能做什么的建议吗?这是我的整个登录脚本(我已经连接到DB),我只需要为哈希密码添加if语句。
if(isset($_POST['Login'])){
$Username = mysqli_real_escape_string($con,$_POST['Username']);
$UserPassword = mysqli_real_escape_string($con,$_POST['UserPassword']);
$sel_user = "select * from users where Username='$Username' AND UserPassword='$UserPassword'";
$run_user = mysqli_query($con, $sel_user);
$check_user = mysqli_num_rows($run_user);
if($check_user>0){
session_start();
$_SESSION['Username']=$Username;
header('Location: index.php');
}
else {
header('Location: login.php');
echo "<p>". "Wrong password or username" . "</p>";
}
}
答案 0 :(得分:1)
您应该使用存储在数据库中的哈希来检查用户提供的密码。 所以你必须做这样的事情:
if (isset($_POST['login']) {
//check for if password is provided
//some code to verify user login in database and if exists get password
//hash for this login like this
$query = mysqli_query($con,"select hash from users where
username=".$login); //or some error proccessing
if (mysqli_num_rows($query) == 0) {
//incorrect login proccesing
}
$hash = mysqli_fetch_assoc($query)['hash'];
if (!password_verify($password,$hash)) {
//wrong passsword proccesing
}
}