为了账号安全,请及时绑定邮箱和手机立即绑定

我的数据库密码和用户填写的密码不匹配

我的数据库密码和用户填写的密码不匹配

PHP
噜噜哒 2023-07-15 17:40:03
我的 php 登录文件有问题。我通过检查电子邮件向我的数据库询问密码。当我获得此密码时,我会使用用户填写的密码进行检查。结果password_verify($Passwd, $row['Passwd'])将始终返回 0,但结果应返回 1(密码匹配)。为什么我的密码不一致?登录代码:<?phpif(isset($_POST['submit'])){    include_once '../includes/connection.php';    $Email = $_POST['email'];    $Passwd = $_POST['passwd'];    //Create Template    $sql = "SELECT Passwd FROM user WHERE Email = ?";    //Create Prepared Statement    $stmt = mysqli_stmt_init($conn);    //Prepare Prepared Statement    if(!mysqli_stmt_prepare($stmt, $sql)){        echo "SQL Statement Failed";    } else {        mysqli_stmt_bind_param($stmt, "s", $Email);        mysqli_stmt_execute($stmt);        $res = mysqli_stmt_get_result($stmt);                while ($row = mysqli_fetch_assoc($res)){                        echo $Passwd . "<br>";            echo $row['Passwd'];            if(password_verify($Passwd, $row['Passwd'])){                echo "1";            } else {                echo "0";            }        }    }} else {    header("Location: ../index.php?login=error");}?>Passwd是数据库中的 varchar(50) 列。
查看完整描述

1 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

password_hash手册说:

建议将结果存储在可以扩展超过 60 个字符的数据库列中(255 个字符是一个不错的选择)

因此,您需要为数据库中的密码列指定 60 个字符的最小大小 - 但建议使用更大的大小,例如 255,以防默认哈希算法将来发生变化。

您还需要重新生成存储在 50 个字符字段中的任何现有密码,因为它们在保存时将被截断,并且额外的信息已丢失,这意味着这些旧密码永远无法验证。


查看完整回答
反对 回复 2023-07-15
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信