我在Apollo客户上遇到了一些麻烦,想知道是否有人可以在这里帮助我。
在成功向我返回了承载令牌的突变后,如何重新运行查询(带有标头)?
我发现有一个叫做refetchQueries的东西,但是它似乎忽略了所有标头,因此也忽略了我的不记名令牌。
说我的登录组件有以下突变:
<Mutation
mutation={LOGIN_USER}
refetchQueries={[{
query: GET_USER,
}]}
>
{(loginUser, { loading, error, data }) => {
if (data) {
cookies.set('token', data.loginUser.token)
}
return (
<form...
和我的App.js中的以下authLink:
const authLink = setContext((_, { headers }) => {
const token = cookies.get('token')
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : null
},
}
})
问题似乎是使用refetchQueries时authLink不能正常工作(不发送头)。当我刷新浏览器时,我的查询工作正常,因为然后使用cookie来获取令牌,但是refetchQueries似乎不会发生这种情况。
那么在突变后的标头中带有不记名令牌的情况下如何运行查询?或者有更好的方法吗?
欢呼
答案 0 :(得分:0)
我不知道您如何定义查询和变异,但是refetchQueries可以使用字符串数组来命名要重新获取的查询。我发现这很适合我的需求。为此,您需要命名查询。在gql标记内,像
一样声明您的查询const GET_USER = gql`
query getUser($id: ID) {
user(id: $id) {
name
}
}
`
然后您仅使用['getUser']调用refetchQueries
关于将Apollo设置为在每个请求上自动设置授权标头,只需查看docs
中的示例向下滚动到有关中间件的部分