Я создаю систему аутентификации на основе JWT.
JWT истекло время. Когда срок действия JWT истекает, я ловлю ошибку истечения срока действия JWT, используя apollo-link-error. Я хочу вызвать метод apolloClient.resetStore() для сброса кеша.
Вот мой код:
const errorLink = onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors)
graphQLErrors.map(error => {
// console.info(`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`)
if (error.code === 1001) {
auth.signout();
// how can I get apollo client here?
//client.resetStore();
}
});
if (networkError) console.info(`[Network error]: ${networkError}`);
});
const client = new ApolloClient({
cache,
link: from([authMiddleware, errorLink, terminalLink])
});
Я не уверен, что apollo-link-error - это подходящее место для обработки ошибки просроченного JWT.





Вы должны просто иметь возможность вызвать клиенту напрямую:
const errorLink = onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors) {
client.resetStore();
}
});
const client = new ApolloClient({
cache: new InMemoryCache({ fragmentMatcher }),
link: ApolloLink.from([
errorLink,
// otherLink,
// otherLink,
]),
});
Вы даже можете вызвать его из вложенной функции конфигурации:
const client = new ApolloClient({
cache: new InMemoryCache({ fragmentMatcher }),
link: ApolloLink.from([
onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors) {
client.resetStore();
}
}),
// otherLink,
// otherLink,
]),
});
Ответ Микаэля работает для меня. Просто используйте client.resetStore (); в onError, как ответ Микаэля.
Но также не забудьте связать errorLink с клиентом в качестве примера ниже:
const client = new ApolloClient({
cache,
link: authLink.concat(errorLink).concat(restLink).concat(httpLink),
resolvers
});
Для меня тоже.