Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用bcrypt进行登录身份验证_Php_Laravel_Bcrypt - Fatal编程技术网

Php 使用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

我有一个用Laravel构建的web应用程序。我在另一个网站工作,但不是和拉威尔。我需要使用Laravel站点数据库中的users表来验证这个新站点上的用户。密码用bcrypt散列

我试图在用户登录之前验证密码,但我似乎遗漏了一些东西。有人能帮忙吗


不确定,但您试过了吗

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'>&times;</a>
                          <strong>Warning!</strong> Invalid credentials.
                        </div>";
                         }
                        }?>

$user===$dbemail
无效(您已在查询中检查此条件)+
密码='$pass'
在查询中也无效,您应该从查询中删除此条件-您需要仅基于电子邮件字段查找行,然后检查DB行中的哈希密码是否与用户输入的密码匹配警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行@AlonEitan我注意到每次我提交相同的密码时,哈希值都是不同的。因此,它与数据库中已存储的内容不匹配。某个地方出了问题,但还无法找出原因。@Jahswey不必担心-它应该每次都不一样,而且每次都会更改,因此无法将其转换为实际密码:)但只要将哈希值与密码本身进行比较,则创建的每个哈希值都将匹配