Apollo客户端直到页面刷新后才向令牌发送令牌

时间:2019-10-30 18:15:04

标签: graphql apollo react-apollo apollo-client

我一直在开发一个应用程序,只有在我开始清除缓存时才意识到此问题,但是我的应用程序只能在刷新时正常工作。当我清除所有缓存,刷新然后通过我的应用程序运行时,我意识到查询正在返回我的自定义错误“ GraphQL错误:未通过用户身份验证”。

我认为设置阿波罗客户的方式出了问题。似乎上下文在实例化后立即设置,然后即使令牌存在,也永远不会更改上下文。它还将解释为什么登录后刷新后,查询将使用令牌直到清除本地存储/缓存。所以我的问题是我有什么问题?

import { persistCache } from "apollo-cache-persist";

import { ISLOGGEDIN_QUERY } from "./components/gql/Queries"

const cache = new InMemoryCache();
const token = localStorage.getItem('token')
persistCache({
    cache,
    storage: localStorage
})
const client = new ApolloClient({
    uri: "http://localhost:4000/graphql",
    cache,
    resolvers: {
        Mutation: {
            changeValue: (_, args, { cache }) => {
                const { isAuth } = token ? cache.readQuery({ query: ISLOGGEDIN_QUERY }) : false;
                cache.writeData({
                    data: { isAuth: !isAuth }
                })
                return null;
            }
        }
    },

    request: (operation) => {
        operation.setContext({
            headers: {
                authorization: token ? token : ''
            }
        })
    },
});

//set default values
client.cache.writeData({ data: { isAuth: token ? true : false } })


export default client;```

0 个答案:

没有答案