Чтение данных из кеша graphql apollo 2.0

Я использую Apollo 2.0. Сначала я вызываю authUsergraphql на сервер для данного имени пользователя и пароля, которые генерируют токен jwt и возвращают токен в ответ. Я вижу, что при успешном входе в систему User сохраняется в cache как значение ключа id. У меня есть кнопка Buy, где мне нужно сделать validateSSOSession для данного token. Для validateSSOSession мне нужно прочитать token из кеша.

Я прошел через client.readQuery, client.fragementQuery, но оба они не применимы в моем случае. Bcz client.readQuery ожидаю, что тот же запрос был вызван ранее на сервер, и у меня должна быть такая же переменная. Поскольку у меня нет username/password, я не могу вызвать в client.readQuery. Точно так же client.fragementQuery ожидает, что id является обязательным. Поскольку у меня нет id, я не могу его использовать.

На данный момент я просто повторяю data из cache и фильтрую User, как показано ниже.

const data = client.cache.data.data;
  const users = _.values(data).filter(obj=>(obj.__typename==='User' && obj.token));
  const token = users[0].token;

  // Make graphql call to validate sso
  const { data } = await client.query({
    query: GET_SSO_USER,
    variables: { token }
  });

  const authenticated = data.getSingleSignOnUser.user.userId;

Есть ли другой простой способ запросить User из кеша для данного условия?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
9
0
5 432
1

Ответы 1

Пользуюсь client.readQuery(). См. Документы об этом https://www.apollographql.com/docs/react/api/apollo-client.html#ApolloClient.readQuery

import gql from 'graphql-tag';
import { withApollo } from "react-apollo";

const MY_QUERY = gql`
    query {
      user {email}
    }`;

const MyReactComp = ({client}) =>{
    const someQueryResult = client.readQuery({ query: MY_QUERY });
        return someQueryResult.user ? 'hello user' : 'oops';
    }

export default withApollo(MyReactComp);

привет @proti, как ваши данные выглядят в кеше, чтобы MY_QUERY был успешным? У меня проблемы с чтением данных stackoverflow.com/questions/61208333/…, спасибо ?

chris 14.04.2020 22:58

обычный объект данных.

proti 15.04.2020 10:17

Другие вопросы по теме