注销方法不会从db中删除令牌

时间:2017-12-27 13:30:32

标签: php pdo jwt sql-delete logout

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

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

    <?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状态,所以看起来一切正常但却没有。

    现在用户类中的注销功能代码是:

    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

1 个答案:

答案 0 :(得分:-1)

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

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