如果令牌过期,如何在 apollo 客户端中重定向或导航

Posted

技术标签:

【中文标题】如果令牌过期,如何在 apollo 客户端中重定向或导航【英文标题】:How to redirect or navigate in apollo client if token is expired 【发布时间】:2020-10-03 22:10:21 【问题描述】:

我只是对客户端使用 React-Native 并在我的服务器中检查验证令牌。

当我的 jwt 令牌过期时,服务器会通知客户端。

然后,apollo-client 捕获 graphQL 错误。

我想导航到注销用户,然后让它进入登录表单。

但是,我不知道如何在我的 graphQL forEach 块中做到这一点,

因为我不能在 NavigationContainer 之外使用反应导航。

谁知道解决这个问题?

...
const cache = new InMemoryCache()
        await persistCache(
            cache,
            storage: AsyncStorage,
        )  
const clientState = (cache) =>
new ApolloClient(
    link: ApolloLink.from([
        ...
        onError(( graphQLErrors, networkError ) => 
            if (graphQLErrors)
                graphQLErrors.forEach(
                    async ( message, locations, path ) => 
                        console.log(
                            `[GraphQL error]: Message: $message, Location: $JSON.stringify(
                                locations
                            ), Path: $path`
                        )
                        if (
                            message ===
                            "You need to log in to perform this action"
                        ) 
                            logout() >>>>>>>>>>>> I want to redirect!
                        
                    
                )
            if (networkError)
                console.log(`[Network error]: $networkError`)
        ), 
     ...
])
const client = clientState(cache)
return loaded && client ? (
    <ApolloHooksProvider client=client>
        <SafeAreaProvider>
            <AuthProvider isLoggedIn=isLoggedIn userEmail=userEmail>
                <NavigationContainer style= backgroundColor: "white" >
                    <TopNav />
                </NavigationContainer>
            </AuthProvider>
        </SafeAreaProvider>
    </ApolloHooksProvider>
) : (
    <AppLoading />
)

【问题讨论】:

【参考方案1】:

您可以在发送请求的地方使用状态更新。并在 onError() 上删除此处的无效令牌。这是一种方法。

【讨论】:

以上是关于如果令牌过期,如何在 apollo 客户端中重定向或导航的主要内容,如果未能解决你的问题,请参考以下文章

当令牌在角度4中过期时如何重定向到注销

如何在 gwt 客户端中重定向?

如何使用 apollo Reactjs 客户端刷新 Firebase IdToken

如何知道访问令牌已过期?

在 Next.js 中,如何在 axios 拦截器中重定向页面?

react app中令牌过期时如何注销用户