database - 如何防止firestore中单个用户的垃圾邮件喜欢(数据库中的多次写入)
问题描述
所以我在 React Native 和 Firestore 中构建了一种社交应用程序。我想让用户“喜欢”一家商店。我在我的用户文档中添加了一个 favoritesShops 数组,因为我需要将附近的商店 ID 与该数组中包含的商店 ID 进行比较。我还有另一个分析集合,可以让我在这个结构中保存一个文档 userId+"@"+ShopId 和状态:1 表示“最喜欢”,-1 表示“不喜欢”。现在我在每家商店旁边做了一个按钮来收藏这家商店。因此,每次单击都会触发分析上的 batch.set 和阵列上的 batch.update。一切都按预期工作,但现在单个用户可以向“最喜欢的”按钮发送垃圾邮件,从而为每个 1 或 -1 触发大量批量写入(并更新数组)。所以我的问题是,我该如何防止这种情况发生?
解决方案
您可以添加一个侦听器来捕获更改后的值,并在提交更改之前等待 1 秒以上。这样可以确保用户可以多次向该按钮发送垃圾邮件,但一旦他们停止,它就会更新。
您希望在客户端上模拟更改以保持更新用户体验。确保您正在跟踪应用根目录中的更改,以便在用户快速切换时对其进行处理。
您还可以实施的另一个解决方案是每个用户的“lastLiked”,这将使所有读取和写入翻倍,但您可以在安全规则中使用此值来拒绝频繁更改。但它是读/写繁重的,只有在需要时才应该使用。
推荐阅读
- ios - 如何在swift 3中搜索属性文本中的单词?
- java - 如何让android直接连接mysql
- dart - Angular Dart“reorder-list”组件使用示例
- r - highcharter:BoxPlot 异常值不在正确的 x 轴点上
- scala - 编写火花作业时是否有理由不使用 SparkContext.getOrCreate?
- c# - 使用 s22 库仅读取 IMAP 中的主要电子邮件
- python - Scipy 最小化不执行迭代
- python - 记录 python - 带颜色的自定义格式化程序
- facebook - iOS - 如何在不硬编码 info.plist 文件中的值的情况下启用 Facebook 登录
- hadoop - 在缓存中找不到 Hdfs 委托令牌 - Spark 应用程序中的错误