@awenn2015
Веб-программист самоучка

Делает ли react-router-dom v6 редиректы при загрузке страницы?

Всем привет, написал систему авторизации в 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);
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы