php - 使用 bcrypt 进行登录验证
问题描述
我有一个使用 Laravel 构建的网络应用程序。我正在另一个网站上工作,但不是 Laravel。我需要使用 Laravel 站点数据库上的 users 表对这个新站点上的用户进行身份验证。密码使用 bcrypt 散列。
我试图在用户登录之前验证密码,但我似乎遗漏了一些东西。有人可以帮忙吗?
<?php
if (isset($_POST['login'])) {
$user = mysqli_real_escape_string($_POST['email']);
$pass = mysqli_real_escape_string($_POST['password']); //input entered
$dpass = password_hash('$pass', PASSWORD_DEFAULT)."\n";
echo $dpass;
$query = mysqli_query($conn, "SELECT * FROM users WHERE `email` = '$user' AND `password` ='$pass'");
$numrows = mysqli_num_rows($query);
if ($numrows != 0) {
while ($row = mysqli_fetch_assoc($query)) {
$dbemail = $row['email'];
$dbpassword = $row['password'];
}
if ($user === $dbemail && password_verify($pass, $dbpassword)) {
session_start();
$_SESSION['email'] = $username;
// Redirect Browser
header("Location:mentor.php");
}
} else {
echo "<div class='alert alert-danger alert-dismissible'>
<a href='#' class='close' data-dismiss='alert' aria-label='close'>×</a>
<strong>Warning!</strong> Invalid credentials.
</div>";
}
}
?>
解决方案
在从上述评论中得到建议后,我得出了这个可行的方法。
<?php
if(isset($_POST['login'])){
$user = mysqli_real_escape_string($conn,$_POST['email']);
$pass = mysqli_real_escape_string($conn,$_POST['password']); //input entered
$query = mysqli_query($conn, "SELECT * FROM users WHERE `email` = '$user'");
$numrows = mysqli_num_rows($query);
if($numrows !=0)
{
while($row = mysqli_fetch_assoc($query))
{
$dbemail=$row['email'];
$dbpassword=$row['password'];
}
if(password_verify($pass, $dbpassword))
{
session_start();
$_SESSION['email'] = $username;
//Redirect Browser
}
}
else
{
echo "<div class='alert alert-danger alert-dismissible'>
<a href='#' class='close' data-dismiss='alert' aria-label='close'>×</a>
<strong>Warning!</strong> Invalid credentials.
</div>";
}
}?>
推荐阅读
- asp.net-core - 如何在不使用 JavaScript 的情况下通过单击 Asp.net 核心中的向上和向下按钮来更改顺序
- python - 如何解决 Notepad++ 中不一致的缩进
- kotlin - IntelliJ 编译器警告为可变参数传播空数组
- flutter - 未处理的异常:输入“未来”
' 不是类型 'Future 的子类型 ' - c - 分段错误:11,在 C 代码中尝试打印结果时
- excel - 如何确定图表是否存在于工作表中
- java - JSR310 如何将月日模式国际化?
- python - 在 dart/Flutter 中是否有等效于 python 的 global 关键字?
- amazon-cognito - 自定义属性存储在 AWS Cognito 中的什么位置?
- azure - Azure Active Directory SCIM 映射