Я использую 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 из кеша для данного условия?


Пользуюсь 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/…, спасибо ?