"Непойманная (в обещании) ошибка: Request failed with status code 403" вместо перенаправления на страницу входа в систему

Вместо перенаправления на страницу входа я получаю ошибку 403, когда срок действия моего JWT-токена истек. Я пытаюсь добиться того, чтобы, когда срок действия токена истекает или возникает какая-либо другая проблема, приводящая к тому, что токен не действителен, он перенаправлял на страницу входа. Но когда токен (строки 22-25 внутри App.js, где находится код, связанный с перенаправлением).

AuthContext.js

App.js

import React, { useContext } from "react";
import {
  BrowserRouter as Router,
  Routes,
  Route,
  Navigate
} from "react-router-dom";
import { AuthContext, AuthContextProvider } from './contexts/AuthContext'

import { FacilityDetail } from './components/FacilityDetail'
import { Settings } from './components/Settings'
import { Login } from './components/Login'
import { Reset } from './components/Reset'
import { Navbar } from "./components/Navbar";
import { FacilityUpdate } from "./components/FacilityUpdate";
import { Signup } from "./components/Signup"
import { ConfirmEmail } from "./components/ConfirmEmail";
import { FacilityList } from './components/FacilityList'
import { ResetConfirm } from './components/ResetConfirm'
import { Home } from "./components/Home";

const EnforceAuthOnRoute = ({ children }) => {
  const { shouldGoToLogin, user } = useContext(AuthContext)
  return user && !shouldGoToLogin ? children : <Navigate replace to="/login" />
}

export default function App() {
  return (
    <Router>
      <AuthContextProvider>
        <div>
          <Navbar />          

          {/* A <Routes> looks through its children <Route>s and
              renders the first one that matches the current URL. */}
          <div className="max-w-8xl mx-auto px-4 sm:px-6 md:px-8">
            <Routes>
              <Route path="/about" element={<About/>} />
              <Route path="/users" element={<Users />} />
              <Route path="/facilities/:id" element={<EnforceAuthOnRoute><FacilityDetail /></EnforceAuthOnRoute>} exact />
              <Route path="/facilities/:id/update" element={<EnforceAuthOnRoute><FacilityUpdate /></EnforceAuthOnRoute>} exact />
              <Route path="/settings" element={<EnforceAuthOnRoute><Settings /></EnforceAuthOnRoute>} exact />
              <Route path="/login" element={<Login />} exact />
              <Route path="/signup" element={<Signup />} exact />
              <Route path="/reset" element={<Reset />} exact />
              <Route path="/password-reset/confirm/:uid/:token" element={<ResetConfirm />} exact />
              <Route path="/accounts/confirm-email/:key" element={<ConfirmEmail />} exact />
              <Route path="/facilities" element={<EnforceAuthOnRoute><FacilityList /></EnforceAuthOnRoute>} exact />
              <Route path="/" element={<Home />} exact />
            </Routes>
          </div>
        </div>
      </AuthContextProvider>
    </Router>
  );
}

function About() {
  return <h2>About</h2>;
}

function Users() {
  return <h2>Users</h2>;
}

Из какой строки вы получаете эту ошибку?

Так вы проверяете токен каждые 15 секунд?

Я бы предложил сделать это другим способом. Для этого можно использовать перехватчики Axios. Каждый раз, когда вы отправляете запрос с маркером доступа, и если ваш сервер отклоняет запрос из-за истечения срока действия маркера, то перехватчик перехватит этот запрос и автоматически отправит запрос на обновление маркера, а затем автоматически повторно отправит ранее неудачный запрос. В противном случае, если вы будете проверять свой сервер каждые 15 секунд, то ваш API-сервер будет перегружен при большом трафике.

Вернуться на верх