注销方法不会从数据库中删除令牌
logout method doesnt delete token from db
我创建了包含 3 个部分的注销算法。
- 第一层是我从邮递员调用并将从前端调用的端点。
- 第二个是用户 class 中的方法,它实际上完成了所有工作。
- 第三个是令牌 class,我在用户 class 中使用它来检查令牌是否仍然相同并解码它以收集以令牌编码的用户 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);
}
有趣的是,当我从邮递员那里调用它时,它的 return 状态为 200,所以看起来一切正常,但实际上没有。
现在用户class中注销功能的代码是:
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;
}
}
这是 return 是真的,因为就像我说的,我在邮递员中得到了 200,但它不会从数据库中删除令牌。为什么?它不会打印出任何额外的错误信息或任何内容。
如果您需要任何其他信息或代码,请告诉我。
编辑
- 我更改了端点代码我添加了 3 行应该将显示错误设置为 true。
- 我更改了注销功能的代码 我添加了 try..catch 以显示一些错误。
通过邮递员调用后仍然没有任何错误:
这里的解决方案非常简单,我很惊讶没有人能帮我解决这个问题,我对自己花了太多时间感到很沮丧。
所以我想从令牌列中删除令牌,但我为此使用了错误的 sql 操作。 DELETE
用于删除整条记录,而不仅仅是一个值。我应该改用 UPDATE
。
我创建了包含 3 个部分的注销算法。
- 第一层是我从邮递员调用并将从前端调用的端点。
- 第二个是用户 class 中的方法,它实际上完成了所有工作。
- 第三个是令牌 class,我在用户 class 中使用它来检查令牌是否仍然相同并解码它以收集以令牌编码的用户 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);
}
有趣的是,当我从邮递员那里调用它时,它的 return 状态为 200,所以看起来一切正常,但实际上没有。
现在用户class中注销功能的代码是:
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;
}
}
这是 return 是真的,因为就像我说的,我在邮递员中得到了 200,但它不会从数据库中删除令牌。为什么?它不会打印出任何额外的错误信息或任何内容。
如果您需要任何其他信息或代码,请告诉我。
编辑
- 我更改了端点代码我添加了 3 行应该将显示错误设置为 true。
- 我更改了注销功能的代码 我添加了 try..catch 以显示一些错误。
通过邮递员调用后仍然没有任何错误:
这里的解决方案非常简单,我很惊讶没有人能帮我解决这个问题,我对自己花了太多时间感到很沮丧。
所以我想从令牌列中删除令牌,但我为此使用了错误的 sql 操作。 DELETE
用于删除整条记录,而不仅仅是一个值。我应该改用 UPDATE
。