我创建了logout算法,它有3个部分。
我的端点代码是:
<?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中删除令牌。为什么?它不打印任何其他错误信息或任何东西。
如果您需要任何其他信息或代码,请告诉我。
编辑
通过邮递员打电话后仍然没有任何错误:
这里的解决方案非常简单,我很惊讶任何人都无法帮助我,我对自己感到很沮丧,因为我花了太多时间在这上面。
所以我想从令牌列中删除令牌,但我使用了错误的SQL操作。 DELETE
用于删除整个记录,不仅仅是一个值。我应该使用UPDATE
代替。