Всем привет, написал систему авторизации в php и закинул в авторизированную зону приложение на react в котором имеется react-router-dom v6, проблема в том что в php перед загрузкой index.html с реактом стоит проверка кукисов на наличие и проверку jwt токена авторизации и если его нет то делается запрос к бд на удаление этого самого токена, так вот суть в том что после успешной авторизации я обнаруживаю что до отрисовки админки из бд сразу сносится токен, это я выяснил долгими и мучительными тестами, так вот собственно и сам вопрос, делает ли внутри себя роутер какие то редиректы? единственная догадка что в этих самых редиректах естественно куки не передаются и при проверке уже после редиректов токен удаляется из базы.
Немного кода
function getDomain(): string {
$protocol = $_SERVER["REQUEST_SCHEME"];
$domain = $_SERVER['HTTP_X_FORWARDED_HOST'] ?? ($_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME']);;
return "$protocol://$domain";
}
function checkRefreshToken(bool $deleteOnEmpty = false): bool {
$cookie = $_COOKIE[COOKIE_KEY] ?? null;
$auth_api = getDomain() . "/ajax/index.php";
echo '<script>console.log(`empty => ${Boolean(' . empty($_COOKIE[COOKIE_KEY]) . ')}`);</script>';
echo '<script>console.log("' . $_COOKIE[COOKIE_KEY] . '");</script>';
if (empty($cookie)) {
if ($deleteOnEmpty) {
$query = http_build_query([
"action" => "deleteUserToken", "userId" => 4, "nonce" => "K0zMGuxGnaT3"
]);
echo '<script>console.log("Удаляем токен из базы!");</script>';
$path = $auth_api . "?$query";
@file_get_contents($path);
}
return false;
} else {
$opts = array(
'http' => array(
'method' => "GET",
'header' => "Cookie: " . COOKIE_KEY . "=$cookie"
)
);
$context = stream_context_create($opts);
$path = $auth_api . "?action=check";
$json = @file_get_contents($path, false, $context);
if ($json === false) return false;
return true;
}
}
// checkRefreshToken(true);
if (!checkRefreshToken(true))
header("Location: /login.php");
// if ($_SERVER["REQUEST_URI"] === "/index.php")
// header("Location: /");
$path = $_SERVER["DOCUMENT_ROOT"] . "/admin/index.html";
if (!file_exists($path)) {
http_response_code(404);
die();
}
echo file_get_contents($path);