Задать вопрос
@Jorlian

PrivateRoute как реализовать проверку токена?

Всем привет!
Вопрос такой, как в PrivateRoute сделать запрос на бэк и в зависимости от ответа, рендерить страницу!

Компонента App
export default function App() {
    return (
        <Router>
            <div>
                <Switch>
                    <Route path="/login">
                        <LoginPage />
                    </Route>
                    <PrivateRoute path="/messenger">
                        <Messenger />
                    </PrivateRoute>
                </Switch>
            </div>
        </Router>
    );
}


PrivateRoute
function PrivateRoute({children, ...rest}) {
    return (
        <Route
            {...rest}
            render={({location}) =>
                tokenStatus ? (
                    children
                ) : (
                    <Redirect
                        to={{
                            pathname: "/login",
                            state: {from: location}
                        }}
                    />
                )
            }
        />
    );
}


Получается мне надо сделать вот такой запрос на бэк
let token = Cookies.get('token');
        isTokenValid(token)
            .then(response => {
                    if (response.ok) {
                        // tokenStatus = true или вызов action
                    }
                }
            )
    }


export  function isTokenValid(token) {
    return  fetch(`${Url}:${Port}/is-token-valid`, {
        method: 'POST',
        body: JSON.stringify(token)
    })
}


и если ответ 200 то поменять tokenStatus на true и рендерить /messenger
по дефолту tokenStatus = false и рендерится /login
суть вопроса такова, не знаю где вызвать запрос, чтобы до рендера tokenStatus уже поменялся

При логине ответом возвращается токен и записывается в Cookie
  • Вопрос задан
  • 47 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • beONmax
    Профессия Frontend разработчик
    12 месяцев
    Далее
  • beONmax
    Профессия Веб разработчик
    10 месяцев
    Далее
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
это надо делать не в PrivateRoute а где-то в другом месте (например при старте приложения, или после логина) и класть в стейт приложения.
PrivateRoute должен просто смотреть в стейт - можно показывать или нельзя, никаких запросов делать не должен.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽