我正在尝试使用password_hash和password_verify函数使登录表单工作,但由于某些语法错误,我无法验证密码。
以下是我的注册脚本
<?php
include("includes/connection.php");
if(isset($_POST['reg'])) {
//registration form
$u_email = mysqli_real_escape_string($con, $_POST['email']);
$u_pass = mysqli_real_escape_string($con, $_POST['password']);
$get_email = "SELECT * FROM user WHERE user_email='$u_email'";
$run_email = mysqli_query($con, $get_email);
$check = mysqli_num_rows($run_email);
if($check==0){
$hashed_pass = password_hash('u_pass', PASSWORD_BCRYPT, array('cost' => 10));
$insert = "insert into user (user_email, user_pass) values ('$u_email', '$hashed_pass')";
$run_insert = mysqli_query($con, $insert);
if($run_insert) {
echo "<script>alert('Registration Successful!')</script>";
}
else {
echo "<script>alert('Registration not Successful!')</script>";
}
}
else{
echo "Email already registered";
}
}
?>
以下是登录脚本
<?php
include("includes/connection.php");
if(isset($_POST['login'])) {
$u_email = mysqli_real_escape_string($con,$_POST['u_email']);
$u_pass = mysqli_real_escape_string($con,$_POST['u_pass']);
$get_user = "select user_pass from user where user_email='$u_email'";
if(password_verify($u_pass, $user_pass)){
$_SESSION['user_email']=$u_email;
echo "<script>alert('Login successfull')</script>";
}
else {
echo "<script>alert('Password or email is not correct!')</script>";
}
}
?>
即使登录详细信息正确,也只是显示('密码或电子邮件不正确!')。
答案 0 :(得分:0)
您没有将用户密码传递给password_hash()函数。第一个参数应该是密码,即$ _POST [&#39;密码&#39;]不是&#39; u_pass&#39;。
$hashed_pass = password_hash($_POST['password'], PASSWORD_BCRYPT, array('cost' => 10));
还要小心SQL转义。您应该只转义进入SQL字符串的字符串。在你的代码中,你不能在password_hash()中使用$ u_pass,因为你已经使用了mysqli_real_escape_string,因此它不再是用户输入的字符串。
您的登录脚本也有一些错误。
if(password_verify($u_pass, $user_pass)){
$ u_pass已通过mysqli_real_escape_string,因此不是用户输入的内容。另外$ user_pass也不会被定义,因为你没有运行SQL并将user_pass分配给$ user_pass。
我建议退一步,在开发代码时留下密码。使用存储在数据库中的普通密码。然后,您可以通过查看数据库来验证它是否正确保存了电子邮件/密码。一旦它工作,然后添加密码哈希码。