我正在使用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
给定条件?
答案 0 :(得分:2)
我使用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);