Php 使用bcrypt进行登录身份验证
我有一个用Laravel构建的web应用程序。我在另一个网站工作,但不是和拉威尔。我需要使用Laravel站点数据库中的users表来验证这个新站点上的用户。密码用bcrypt散列 我试图在用户登录之前验证密码,但我似乎遗漏了一些东西。有人能帮忙吗Php 使用bcrypt进行登录身份验证,php,laravel,bcrypt,Php,Laravel,Bcrypt,我有一个用Laravel构建的web应用程序。我在另一个网站工作,但不是和拉威尔。我需要使用Laravel站点数据库中的users表来验证这个新站点上的用户。密码用bcrypt散列 我试图在用户登录之前验证密码,但我似乎遗漏了一些东西。有人能帮忙吗 不确定,但您试过了吗 password_verify(mysqli_real_escape_string($_POST['password']), $dbpassword) 我的意思是将非bcrypted密码与哈希进行比较。在拉维尔 Hash::c
不确定,但您试过了吗
password_verify(mysqli_real_escape_string($_POST['password']), $dbpassword)
我的意思是将非bcrypted密码与哈希进行比较。在拉维尔
Hash::check()
也期望非散列密码作为参数。在从上面的评论中得到建议后,我得出了有效的结论
<?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>";
}
}?>
$user===$dbemail
无效(您已在查询中检查此条件)+密码='$pass'
在查询中也无效,您应该从查询中删除此条件-您需要仅基于电子邮件字段查找行,然后检查DB行中的哈希密码是否与用户输入的密码匹配警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行@AlonEitan我注意到每次我提交相同的密码时,哈希值都是不同的。因此,它与数据库中已存储的内容不匹配。某个地方出了问题,但还无法找出原因。@Jahswey不必担心-它应该每次都不一样,而且每次都会更改,因此无法将其转换为实际密码:)但只要将哈希值与密码本身进行比较,则创建的每个哈希值都将匹配