Как правильно перенаправить после перехвата аутентификации Apollo и React - PullRequest
0 голосов
/ 23 января 2019

Я пишу приложение реагирования, которое использует apollo-client, и я использую apollo-link-error для обнаружения ошибок аутентификации во всем мире. Я использую createBrowserHistory для управления историей браузера и redux для управления состоянием моего приложения.

При ошибке аутентификации я хочу перенаправить пользователя на страницу /login. Однако, делая это с history.push('/login') и forceRefresh: false, изменяет URL-адрес, но фактически не перемещается внутри моего приложения.

Если я использую forceRefresh:true, это работает, но приложение полностью перезапускается, чего я бы хотел избежать.

const errorLink = onError(({ graphQLErrors, networkError }) => {
    if(graphQLErrors[0].extensions.code == "UNAUTHENTICATED") {
        // with forceRefresh:true this works, but causes a nasty 
        // reload, without the app doesn't navigate, only the url changes 
        history.push('/login')
    }
});

`

let links = [errorLink, authLink, httpLink];    
const link = ApolloLink.from(links);

    const client = new ApolloClient({
        link: link,
        cache: new InMemoryCache(),
        connectToDevTools: true,
    });

Мне кажется, проблема в том, что я не использую redux-router методы для навигации (поэтому приложение остается прежним, даже если URL-адрес изменяется)

Q: как получить объект redux history, аналогичный использованию withRouter(), когда я не нахожусь внутри компонента? Как правильно справиться с этой ситуацией?

...