我正在基于JWT
构建认证系统。
JWT
已过期。 JWT
过期时,我使用JWT
捕获了apollo-link-error
过期错误。我想调用apolloClient.resetStore()
方法来重置缓存。
这是我的代码:
const errorLink = onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors)
graphQLErrors.map(error => {
// console.log(`[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.log(`[Network error]: ${networkError}`);
});
const client = new ApolloClient({
cache,
link: from([authMiddleware, errorLink, terminalLink])
});
我不确定apollo-link-error
是处理过期JWT
错误的正确地方。
答案 0 :(得分:0)
Mikael的答案对我有用。 只需使用client.resetStore();像Mikael的答案一样在onError中。
但是,还请确保将errorLink链接到客户端,如下所示:
const client = new ApolloClient({
cache,
link: authLink.concat(errorLink).concat(restLink).concat(httpLink),
resolvers
});
答案 1 :(得分:-1)
您应该可以直接直接致电客户:
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,
]),
});