我正在使用graphql_flutter包,但似乎正在缓存的内容存在问题。客户端将缓存数据从一个用户传递给另一个用户,即使FetchPolicy
设置为noCache
.
我在下面概述了我的 graphql 客户端设置的外观,然后是我用于向服务器发送查询的自定义方法(它获取用户喜爱的项目)。我查看了官方文档中的策略,并相信我的设置是正确的。问题(以及重现的步骤)如下:
- 我使用测试用户帐户登录我的应用程序(使用 Amplify Cognito 进行身份验证)并将一些项目添加到用户的收藏夹列表中(带有突变请求)。
- 然后,我导航到“收藏夹”摘要页面,在该页面中我调用下面概述的
fetchFavoritesData
方法来获取用户收藏的所有项目。奇迹般有效。 - 然后我注销并创建一个全新的用户帐户并使用这个新用户登录(即不同的访问令牌和所有)。
- 在将任何项目添加到此新用户的收藏列表之前,如果我检查他们的“收藏夹”摘要页面,该页面调用该
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 进行身份验证,并且该错误不再发生。不确定身份验证包是因果关系还是只是相关性,但这不再是问题。