首页 > 解决方案 > 如何防止firestore中单个用户的垃圾邮件喜欢(数据库中的多次写入)

问题描述

所以我在 React Native 和 Firestore 中构建了一种社交应用程序。我想让用户“喜欢”一家商店。我在我的用户文档中添加了一个 favoritesShops 数组,因为我需要将附近的商店 ID 与该数组中包含的商店 ID 进行比较。我还有另一个分析集合,可以让我在这个结构中保存一个文档 userId+"@"+ShopId 和状态:1 表示“最喜欢”,-1 表示“不喜欢”。现在我在每家商店旁边做了一个按钮来收藏这家商店。因此,每次单击都会触发分析上的 batch.set 和阵列上的 batch.update。一切都按预期工作,但现在单个用户可以向“最喜欢的”按钮发送垃圾邮件,从而为每个 1 或 -1 触发大量批量写入(并更新数组)。所以我的问题是,我该如何防止这种情况发生?

标签: databasefirebasegoogle-cloud-firestoredata-modeling

解决方案


您可以添加一个侦听器来捕获更改后的值,并在提交更改之前等待 1 秒以上。这样可以确保用户可以多次向该按钮发送垃圾邮件,但一旦他们停止,它就会更新。

您希望在客户端上模拟更改以保持更新用户体验。确保您正在跟踪应用根目录中的更改,以便在用户快速切换时对其进行处理。

您还可以实施的另一个解决方案是每个用户的“lastLiked”,这将使所有读取和写入翻倍,但您可以在安全规则中使用此值来拒绝频繁更改。但它是读/写繁重的,只有在需要时才应该使用。


推荐阅读