читать данные из кеша graphql apollo 2.0 - PullRequest
0 голосов
/ 06 мая 2018

Я использую Apollo 2.0. Сначала я делаю authUser graphql вызов сервера с заданным именем пользователя и паролем, который генерирует токен 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 из кэша для данного условия?

1 Ответ

0 голосов
/ 09 августа 2018

Я использую 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);
...