gpt4 book ai didi

reactjs - apollo客户端,onError,ApolloProvider,client.writeData(localstate)…服务器返回401时如何处理对用户的身份验证

转载 作者:行者123 更新时间:2023-12-03 07:48:55 24 4
gpt4 key购买 nike

因此,我有一个使用apollo-graphql的应用程序,其中某些解析程序仅对经过身份验证的用户可用,如果未经身份验证的用户尝试访问它们,它们将返回401。我知道那里没有开创性的东西。

但是,我试图拦截该错误,进行处理,调用一个函数以注销用户(重置本地状态 session 对象),然后重定向到“/login”。

因此,这里有onError:-

import { logout } from "_helpers"

const errorLink = onError(({ graphQLErrors, networkError }) => {
...
if (networkError && networkError.statusCode === 401) {
logout()
history.push('/')
}
...
});

现在,我有两种版本的logout()函数-一种在 Prop 中传递了apollo客户端,另一种是我尝试使用ApolloProvider使它可用:-
import { ApolloConsumer } from "react-apollo"

export const logout = () => {
return (
<ApolloConsumer>
{client => client.writeData({data: {session: {...session, isAuthed: false}}})}
</ApolloConsumer>
)
}

export const logout = (client) => {
client.writeData({data: {session: {...session, isAuthed: false}}})
}

第一个版本-在参数中传递了客户端-已在调用logout()的代码已经可以使用客户端的组件中进行了测试和测试,因此client.writeData({data:{session:{... session,isAuthed :false}}})工作正常。但是,我希望有一个版本的函数,而不必在参数中传递客户即可被调用,这就是为什么我有第二个版本。但是,这不起作用-它似乎没有运行writeData()。

因此,我想知道以下一项或两项:-

为什么第二个版本(ApolloProvider正在传递客户端)不起作用?

如果我只想使用将客户端作为参数传递的logout()版本,是否可以通过onError()代码使客户端可用,所以它类似于以下内容吗?
const errorLink = onError(({ graphQLErrors, networkError }) => {
...
if (networkError && networkError.statusCode === 401) {
logout(client)
history.push('/')
}
...
});

任何帮助,不胜感激...

最佳答案

在这里找到通过客户的答案:-

https://github.com/apollographql/apollo-link/issues/595

关于reactjs - apollo客户端,onError,ApolloProvider,client.writeData(localstate)…服务器返回401时如何处理对用户的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55691599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com