我创建了logout algoritm,它有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状态,所以看起来一切正常但却没有。
现在用户类中的注销功能代码是:
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中删除令牌。为什么?它不会打印出任何其他错误信息或其他任何内容。
如果您需要任何其他信息或代码,请告诉我。
修改
通过邮递员打电话后仍然没有任何错误:
答案 0 :(得分:-1)
这里的解决方案非常简单,我很惊讶任何人都无法帮助我,我很沮丧,因为我花了太多时间在这上面。
所以我想从令牌列中删除令牌,但我使用了错误的SQL操作。 DELETE
用于删除整个记录,而不仅仅是一个值。我应该使用UPDATE
代替。