1

我正在使用graphql_flutter包,但似乎正在缓存的内容存在问题。客户端将缓存数据从一个用户传递给另一个用户,即使FetchPolicy设置为noCache.

我在下面概述了我的 graphql 客户端设置的外观,然后是我用于向服务器发送查询的自定义方法(它获取用户喜爱的项目)。我查看了官方文档中的策略,并相信我的设置是正确的。问题(以及重现的步骤)如下:

  1. 我使用测试用户帐户登录我的应用程序(使用 Amplify Cognito 进行身份验证)并将一些项目添加到用户的收藏夹列表中(带有突变请求)。
  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 进行身份验证,并且该错误不再发生。不确定身份验证包是因果关系还是只是相关性,但这不再是问题。

4

0 回答 0