Клиент Apollo не отправляет токен на сервер до обновления страницы - PullRequest
0 голосов
/ 30 октября 2019

Я работал над приложением и осознал эту проблему, только когда начал очищать кеш, но мое приложение прекрасно работает только при обновлении. Когда я очистил весь кэш, обновил и запустил приложение, я понял, что мои запросы возвращают мою пользовательскую ошибку «Ошибка GraphQL: не аутентифицирован как пользователь».

Я считаю, что что-то не так с тем, как я настроил мой клиент apollo. Кажется, что контекст устанавливается , как только он создается , и затем никогда не меняет контекст, даже если токен существует. Это также объясняет, почему после входа в систему, а затем обновления запросы работают с токеном, пока локальное хранилище / кэш не будет очищен. Итак, мой вопрос: что не так с тем, что у меня есть?

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;```
...