Я пытаюсь перенаправить пользователя на страницу "Не авторизован" после получения 403 ответа API. Вот что я получил до сих пор:
создал собственную историю использования history.push
вне компонентов React
import { BrowserRouter } from "react-router-dom"
import { createBrowserHistory } from "history"
export const history = createBrowserHistory()
export default class OwnBrowserRouter extends BrowserRouter {
history
}
Тогда я получил обработчик API, как это:
import { history } from "./my-own-history"
const responseErrorHandler = error => {
const status = _get(error, "response.status")
if (status === 403) {
history.push(getRoutePath("not-authorized"))
}
throw error
}
const requestFactory = (
method,
url,
body = {},
useToken = true,
ownToken = ""
) => {
... not important code here ...
return axios(url, config)
.then(responseSuccessHandler)
.catch(responseErrorHandler)
}
И, наконец, у меня есть страница Article
, где я вызываю избыточное действие retrieveArticle(id)
. Если пользователь не авторизован для просмотра статьи, маршрут браузера корректно изменяется на /not-authorized
, но компонент Article остается обработанным (страница не изменяется).
Когда я добавил .then(() => this.props.history.push("/not-authorized"))
к вызову излишнего действия, он начал работать, но я не хочу добавлять это к каждому вызову API в моем приложении ... Я хочу решить его глобально для всех вызовов API в моем обработчике API. .