php - PHP密码验证无法验证
问题描述
我正在做一些类型的项目要发送。但现在我会坚持使用 password_verify 方法
//Login Existed User
if (isset($_POST['login'])) {
$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);
//$password = password_verify($con, $password);
$cmmnd = "SELECT * FROM user WHERE email = '$email' AND password ='$password'";
$run = mysqli_query($con, $cmmnd);
if ($run -> num_rows > 0) {
$data2 = $run -> fetch_array();
if (password_verify($password, $data2['password'])) {
header("Location: mainpage.php");
}
}else {
echo "<script>alert('ID or Password Are Wrong!');
window.location= 'user.php'</script>";
}
}
上面是登录脚本。
这里注册码
if (isset($_POST['register'])) {
$fname = mysqli_real_escape_string($con, $_POST['fname']);
$remail = mysqli_real_escape_string($con, $_POST['remail']);
$rpswd = mysqli_real_escape_string($con, $_POST['rpswd']);
$hash = password_hash($rpswd, PASSWORD_DEFAULT);
$sql = "INSERT INTO `user` (`name`, `email`, `password`) VALUES ('$fname', '$remail','$rpswd')";
$data = mysqli_query($con, $sql);
header("Location: regist.php");
}
注册很好,但现在我无法登录。我真的很感谢你的帮助。先感谢您
解决方案
首先你需要调整你的注册脚本。切换到准备好的语句并将散列插入数据库而不是纯文本密码。
if (isset($_POST['register'])) {
$hash = password_hash($_POST['rpswd'], PASSWORD_DEFAULT);
$stmt = $con->prepare('INSERT INTO `user` (`name`, `email`, `password`) VALUES (?,?,?)');
$stmt->bind_param('sss', $_POST['fname'], $_POST['remail'], $hash);
$stmt->execute();
header("Location: regist.php");
exit; // always add after header("Location:
}
确保数据库中的密码字段是VARCHAR(255)
并且字符集是utf8mb4
. 还要确保您重定向到的页面regist.php
是正确的。
password
然后在您的登录页面上,您必须根据提供的电子邮件从数据库中获取单个字段。然后,您可以使用该值(如果存在)来检查password_verify()
. 如果哈希匹配,那么您可以重定向。如果没有,那么您将显示一条消息。
//Login Existed User
if (isset($_POST['login'])) {
$stmt = $con->prepare('SELECT password FROM user WHERE email = ?');
$stmt->bind_param('s', $_POST['email']);
$stmt->execute();
$result = $stmt->get_result();
$data2 = $result->fetch_array();
if ($data2 && password_verify($_POST['password'], $data2['password'])) {
header("Location: mainpage.php");
exit;
}
// If the login was unssuccesful then display a message
echo "<script>alert('ID or Password Are Wrong!');
window.location= 'user.php'</script>";
}
推荐阅读
- kubernetes - 如何为 Kubernetes 集群分配 IP?
- python-3.x - Python云函数在重建后没有更新
- python-3.x - 如何执行 myprogram.exe(在 python 脚本中)打开一个弹出窗口并询问用户凭据?
- swift - Swift:弱引用函数作为闭包?
- python - 为什么这些子类会创建新的 tkinter 画布?
- sql - 如何在 SQL DEVELOPER 中设置表中主键的自动增量?
- c++ - 为什么 C++ 中的 pow() 函数在这里对我不起作用?
- php - Ubuntu 14.04 MySQL 扩展已经消失
- naming-conventions - 复合对象的复数命名约定
- c++ - Kosaraju 算法实现问题