PHP无法使用password_hash()/ password_verify()使用正确的密码登录

the_arsenal_bg

我检查了各种类似的报告,但找不到解决方案,因此将不胜感激。

我正在尝试创建一个PHP注册/登录表单。除密码验证外,其他所有内容似乎均正常运行。这是代码的一部分,其中定义了用户名/密码并从数据库中请求用户名/密码以进行验证:

    $username = $_POST['username'];
    $pwd = $_POST['pwd'];
....
....
....
    else{
            $sql = "SELECT * FROM users WHERE username=?;";
            $stmt = mysqli_stmt_init($conn);
            if(!mysqli_stmt_prepare($stmt, $sql)){
              echo "MySQL Error!";
              exit();
            }
             else{
               mysqli_stmt_bind_param($stmt, 's', $username);
               mysqli_stmt_execute($stmt);
               $result= mysqli_stmt_get_result($stmt);
               if ($row = mysqli_fetch_assoc($result)) {
                 $pwdCheck = password_verify($pwd, $row['password']);
                 if($pwdCheck == false){
                 header("Location: ../login.php?error=wrongpassword");
                 exit();
                }
                else if($pwdCheck == true){
                session_start();
                $_SESSION['userId'] = $row['id'];
                $_SESSION['username'] = $row['username'];
                header ("Location: ../login.php?login=success");
                exit();
               }

以下是一些要考虑的事项:

  1. 我将数据库中的密码表设置为LONGTEXT和varchar(250)-仍然没有运气。

  2. 这是var_dump($ pwdCheck,$ pwd,$ row ['password'])的输出

    bool(false)字符串(8)“ testtest”字符串(60)“ $ 2y $ 10 $ nSMyRdh5RcjlKu.vaQMLHeRjmfYTqkjjdnM7HI4Di / 294EBCpE1JG”

它返回bool(false),而“ testtest”是正确的密码,而var_dump显示的字符串是密码数据库表中的正确哈希。所以我真的不确定这里出了什么问题。

这是密码散列的方式(请注意,这是在单独的PHP脚本中完成的,不确定是否重要)

else{

$sql = "INSERT INTO users (username, mailuid, password, managername, teamname) VALUES (?,?,?,?,?)";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)){
echo "MySQL Error";
}
else{
$hashpwd = password_hash($password, PASSWORD_DEFAULT);
mysqli_stmt_bind_param($stmt, "sssss", $username, $mailuid, $hashpwd, $managername, $teamname);
mysqli_stmt_execute($stmt);
  header("Location: ../signup.php?signup=success");
exit();
}

其他所有操作均按预期进行。例如,成功从DB(用户名表)中获取了用户名。看起来也从密码DB表中获取了哈希的通行证,但是验证仍然失败。

卢卡斯雷塔

我创建了一个简单的要点,您可以在其中看到我成功运行的代码版本并获得正确的结果:

  • 用户可以注册
  • 用户可以登录
  • 用户可以退出

我发现您的代码大体上是正确的,但是我也相信您必须混淆了一些变量和字段名称。

在您的问题中,您执行的var_dump$row['pwdUsers']in语句中从未见过的字段。您还可以username在获取数据时选择该字段,以与提交登录的数据进行比较,但是在insert语句中,您插入该字段的变量将被命名$mailuid(变量$username位于其旁边)。

假设在受控环境中提取并应用您的代码后,我敢打赌,您的错误是由于前面提到的令人混淆的命名法或您提供的摘录中隐藏的某些其他逻辑而导致的可能混淆。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

password_verify无法使用Bcrypt验证password_hash

来自分类Dev

PHP password_hash(),password_verify()

来自分类Dev

使用password_hash和password_verify

来自分类Dev

在 OO PHP 中使用来自不同对象的 password_hash 和 password_verify

来自分类Dev

使用password_verify()登录系统

来自分类Dev

正确使用password_hash

来自分类Dev

正确使用password_hash

来自分类Dev

如何使用php的password_hash()方法。

来自分类Dev

password_verify 总是无效的密码,尽管密码是正确的

来自分类常见问题

如何使用PHP的password_hash哈希和验证密码

来自分类Dev

为什么 password_verify 为正确的密码返回 false?

来自分类Dev

在现有密码上使用password_verify

来自分类Dev

在现有密码上使用password_verify

来自分类Dev

使用password_verify()验证MD5密码

来自分类Dev

为什么我没有正确的密码就可以登录?为什么 password_verify 总是返回 true?

来自分类Dev

PHP Password_Hash函数

来自分类Dev

PHP - password_hash() 验证

来自分类Dev

无法使PHP password_hash API正常工作

来自分类Dev

password_hash和password_verify返回false

来自分类Dev

php password_hash和password_verify问题不匹配

来自分类Dev

PHP的password_hash和password_verify看起来仍然不起作用

来自分类Dev

PHP password_hash和password_verify不适用于MySQL

来自分类Dev

PHP password_hash()+ password_verify()今天(2016年5月)安全吗?

来自分类Dev

php password_hash和password_verify问题不匹配

来自分类Dev

php password_hash和password_verify看起来仍然不起作用

来自分类Dev

在 PHP 中使用 password_verify

来自分类Dev

使用CryptoJS对哈希密码进行安全处理,然后使用php password_hash()

来自分类Dev

password_verify哈希与密码不匹配

来自分类Dev

password_verify哈希与密码不匹配

Related 相关文章

  1. 1

    password_verify无法使用Bcrypt验证password_hash

  2. 2

    PHP password_hash(),password_verify()

  3. 3

    使用password_hash和password_verify

  4. 4

    在 OO PHP 中使用来自不同对象的 password_hash 和 password_verify

  5. 5

    使用password_verify()登录系统

  6. 6

    正确使用password_hash

  7. 7

    正确使用password_hash

  8. 8

    如何使用php的password_hash()方法。

  9. 9

    password_verify 总是无效的密码,尽管密码是正确的

  10. 10

    如何使用PHP的password_hash哈希和验证密码

  11. 11

    为什么 password_verify 为正确的密码返回 false?

  12. 12

    在现有密码上使用password_verify

  13. 13

    在现有密码上使用password_verify

  14. 14

    使用password_verify()验证MD5密码

  15. 15

    为什么我没有正确的密码就可以登录?为什么 password_verify 总是返回 true?

  16. 16

    PHP Password_Hash函数

  17. 17

    PHP - password_hash() 验证

  18. 18

    无法使PHP password_hash API正常工作

  19. 19

    password_hash和password_verify返回false

  20. 20

    php password_hash和password_verify问题不匹配

  21. 21

    PHP的password_hash和password_verify看起来仍然不起作用

  22. 22

    PHP password_hash和password_verify不适用于MySQL

  23. 23

    PHP password_hash()+ password_verify()今天(2016年5月)安全吗?

  24. 24

    php password_hash和password_verify问题不匹配

  25. 25

    php password_hash和password_verify看起来仍然不起作用

  26. 26

    在 PHP 中使用 password_verify

  27. 27

    使用CryptoJS对哈希密码进行安全处理,然后使用php password_hash()

  28. 28

    password_verify哈希与密码不匹配

  29. 29

    password_verify哈希与密码不匹配

热门标签

归档