私はapollo2.0を使用しています。最初に、指定されたユーザー名とパスワードに対してサーバーにauthUser
graphql
呼び出しを行います。これにより、jwt
トークンが生成され、それに応じてトークンが返されます。ログインに成功すると、User
がcache
キー値としてid
に格納されていることがわかります。与えられたBuy
に対してvalidateSSOSession
を作成する必要があるtoken
ボタンがあります。 validateSSOSession
の場合、キャッシュからtoken
を読み取る必要があります。
client.readQuery
、client.fragementQuery
を確認しましたが、どちらも私の場合には適用されません。bczclient.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);