PHP 密码哈希在创建哈希时验证

我正在构建一个在树莓派上运行的仪表板系统,并为所有新用户预先生成密码及其哈希值。

我曾经这样做的那一行是 (‘@’, )。

用户首次登录时会看到密码重置窗口。用户在此密码重置页面点击提交后,我可以成功使用 () 和 ()。

第一次登录正常,但是注销后的任何登录尝试都会导致 () 失败。

我检查过/尝试过的内容

我知道的

哈希字符串与 中返回的内容相匹配。我在其他项目中使用了以下函数,使用的是 PHP 7。这个项目是在 PHP 8 上的。(这可能是问题吗?)

密码重置功能

public function firstLoginUpdatePassword($username, $password, $confirm, $token)
{
    if ($password != $confirm)
    {
        header("Location: first-login?mismatch&token=" . $token);
        exit;
    }
    else
    {

图片[1]-PHP 密码哈希在创建哈希时验证-唐朝资源网

$newPassword = password_hash($password, PASSWORD_DEFAULT); $token = bin2hex(openssl_random_pseudo_bytes(16)); try { $stmt = $this->con->prepare("UPDATE Account SET Password=:password, isFirstLogin=FALSE, Token=:token WHERE Username=:username"); $stmt->bindparam(":username", $username); $stmt->bindparam(":password", $newPassword); $stmt->bindparam(":token", $token); if ($stmt->execute()) { header("Location: home"); exit; } else {

图片[2]-PHP 密码哈希在创建哈希时验证-唐朝资源网

header("Location: first-login?error&token=" . $token); exit; } } catch (PDOException $ex) { echo $ex->getMessage(); } } }

登录功能

public function Login($user, $pwd)
{
    try
    {

        $stmt = $this->con->prepare("SELECT Username, Password FROM Account WHERE Username=:username or Email=:username;");
        $stmt->bindparam(":username", $user);
        $stmt->execute();
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        if ($stmt->rowCount() == 1)
        {
            if (password_verify($pwd, $row['Password']))
            {
                try
                {
                    $stmt = $this->con->prepare("UPDATE Account SET LastLogin=CURRENT_TIMESTAMP WHERE Username=:username;");
                    $stmt->bindparam(":username", $row['Username']);
                    if ($stmt->execute())
                    {

                        $_SESSION['userSession'] = $row['Username'];
                        return true;
                    }
                    else
                    {
                        header("Location: login?error-other");
                        exit;
                    }
                }
                catch (PDOException $ex)
                {
                    echo $ex->getMessage();
                }
            }
            else
            {

图片[3]-PHP 密码哈希在创建哈希时验证-唐朝资源网

header("Location: login?error-credential"); exit; } } else { header("Location: login?error-login"); exit; } } catch(PDOException $ex) { echo $ex->getMessage(); } }

© 版权声明
THE END
喜欢就支持一下吧
点赞110赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容