Flutter:graphql_flutter FetchPolicy.noCache返回不同用户的缓存数据

3
我正在使用 graphql_flutter 包,遇到了似乎是缓存问题的问题。即使将 FetchPolicy 设置为 noCache,客户端仍会将缓存数据从一个用户传递到另一个用户。
下面是我的 graphql 客户端设置以及我用于向服务器发送查询的自定义方法(它获取用户收藏的项目)。我已经查看了 官方文档 中的策略,并认为我的设置是正确的。以下是问题(以及复现步骤):
  1. 我使用Amplify Cognito进行身份验证,使用测试用户帐户登录我的应用程序,并使用mutation请求将一些项目添加到用户的收藏夹列表中。
  2. 然后,我导航到“收藏夹”摘要页面,在该页面中调用下面概述的fetchFavoritesData方法,以获取用户收藏的所有项目。非常顺利。
  3. 然后我退出并创建一个全新的用户帐户,并使用此新用户登录(即不同的访问令牌等)。
  4. 在为此新用户添加任何项目到收藏夹列表之前,如果我检查他们的“收藏夹”摘要页面,调用fetchFavoritesData方法并应返回null(因为此用户尚未添加任何内容),实际结果返回了第一个用户收藏的确切项目。奇怪。

一直在玩策略,尝试不同的提取策略等,但问题仍然存在。我是否遗漏了什么(抱歉-对这个软件包完全不熟悉),或者这可能是一个错误吗?

GraphQLClient client = GraphQLClient(
  link: link,
  cache: GraphQLCache(), // declared cache here because I'm using the client for a few different requests, some where caching is preferred.
  );
}

Future<void> fetchFavoritesData() async {
  final QueryOptions options = QueryOptions(
    document: gql(queryFavoritesData),
    // only return result from network
    fetchPolicy: FetchPolicy.noCache,
    // ignore cache data if any
    cacheRereadPolicy: CacheRereadPolicy.ignoreAll,
  );

  final QueryResult result = await GraphQLConfiguration.client.query(options);
}

2021年8月26日更新:

我已经将身份验证迁移到Firebase上,错误不再发生。不确定身份验证包是否是原因还是只是相关性,但这不再是问题。

1个回答

1
身份验证不是问题 您可以通过像这样初始化客户端来更改默认策略:
client = GraphQLClient(
  link: HttpLink(
    GqlConstants.gql_endpoint,
    defaultHeaders: header,
  ),
  defaultPolicies: DefaultPolicies(
    query: Policies(
      cacheReread: CacheRereadPolicy.ignoreAll,
      fetch: FetchPolicy.noCache,
    ),
  ),
  cache: GraphQLCache(store: InMemoryStore()),
);

通过这段代码,你可以一次性自定义策略。 但是你也可以通过以下方式为单个查询进行操作:
QueryResult result = await client.query(
  QueryOptions(
    ...
    fetch: FetchPolicy.noCache,
  ),
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接