猿问

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

我的 php 登录文件有问题。我通过检查电子邮件向我的数据库询问密码。当我获得此密码时,我会使用用户填写的密码进行检查。


结果password_verify($Passwd, $row['Passwd'])将始终返回 0,但结果应返回 1(密码匹配)。


为什么我的密码不一致?


登录代码:


<?php

if(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) 列。



噜噜哒
浏览 118回答 1
1回答

qq_花开花谢_0

password_hash手册说:建议将结果存储在可以扩展超过 60 个字符的数据库列中(255 个字符是一个不错的选择)因此,您需要为数据库中的密码列指定 60 个字符的最小大小 - 但建议使用更大的大小,例如 255,以防默认哈希算法将来发生变化。您还需要重新生成存储在 50 个字符字段中的任何现有密码,因为它们在保存时将被截断,并且额外的信息已丢失,这意味着这些旧密码永远无法验证。
随时随地看视频慕课网APP
我要回答