logout方法不会从db中删除令牌

问题描述 投票:-1回答:1

我创建了logout算法,它有3个部分。

  1. 第一层是我从邮递员调用的端点,将从前端调用。
  2. 第二个是User类中实际执行所有操作的方法。
  3. 第三个是Token类,我在User类中使用它来检查令牌是否仍然相同并解码它以便收集以令牌编码的用户ID。

我的端点代码是:

<?php

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    // LOGOUT DOESN't WORK and it still dont give me any errors

    // required headers
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json");

    // include needed files
    include_once '../config/database.php';
    include_once '../classes/user.php';
    include_once '../classes/token.php';

    // instantiate database and product object
    $database = new Database();
    $db = $database->getConnection();

    // initialize object
    $user = new user($db);
    $token = new token($db);

    $cleanToken = '';

    if(function_exists('apache_request_headers'))
    {
        $headers = apache_request_headers();
        $cleanToken = $token->cutToken($headers);
    }
    else
    {
        http_response_code(500);
        die();
    }

    if(isset($cleanToken) && !empty($cleanToken))
    {
        if($user->logout($cleanToken))
        {
            http_response_code(200);
        }
        else
        {
            http_response_code(401);
        }
    }
    else
    {
        http_response_code(400);
    }

有趣的是,当我从邮递员那里调用它时,它会返回200状态,所以看起来一切正常,但事实并非如此。

现在User类中的注销函数代码是:

public function logout($receivedToken)
{
    include '../config/database.php';
    include '../classes/token.php';

    // instantiate database
    $database = new Database();
    $db = $database->getConnection();

    $token = new token($db);
    if($token->checkToken($receivedToken))
    {
        $userId = $token->getUserId($receivedToken);
        $query = "
            DELETE
              token
            FROM  
              " . $this->table_name . "
            WHERE
              id = ?
        ";

        try
        {
            // prepare query statement
            $stmt = $this->conn->prepare($query);

            //bind values from user
            $stmt->bindParam(1, $userId);

            $return = $stmt->execute();

            if($return === true)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch(PDOException $exception)
        {
            echo "error: " . $exception->getMessage();
        }
    }
    else
    {
        return false;
    }
}

它正在返回true,因为就像我说我在邮递员中得到200但它不会从DB中删除令牌。为什么?它不打印任何其他错误信息或任何东西。

如果您需要任何其他信息或代码,请告诉我。

编辑

  • 我更改端点代码我添加了3行,应将show error设置为true。
  • 我更改了注册函数的代码我添加了try..catch以显示一些错误。

通过邮递员打电话后仍然没有任何错误:

img

php pdo jwt sql-delete logout
1个回答
-1
投票

这里的解决方案非常简单,我很惊讶任何人都无法帮助我,我对自己感到很沮丧,因为我花了太多时间在这上面。

所以我想从令牌列中删除令牌,但我使用了错误的SQL操作。 DELETE用于删除整个记录,不仅仅是一个值。我应该使用UPDATE代替。

© www.soinside.com 2019 - 2024. All rights reserved.