【问题标题】:Firebase rules protect autoincrement counter?Firebase 规则保护自动增量计数器?
【发布时间】:2020-08-22 17:00:28
【问题描述】:

我的 firebase 中有一个计数器,用于计算每个帖子中的点赞数。

var databaseRef = firebase.database().ref('/posts/').child(pid).child('likes');
            databaseRef.transaction(function(count) {

所以在我将它插入到喜欢/postid/userid json 中之后,这将在帖子/喜欢中的每个喜欢中添加 +1。统计点赞数。

我为此制定了一个规则,允许每次计数 +1:

   "likes": {
     ".write": "newData.isNumber() && 
     ((!data.exists() && newData.val() === 1) || newData.val() === data.val()+1)"
   },

它可以避免某人一次在帖子中添加 1000 个赞,但不能保护某人运行一个像每秒一样插入 +1 的脚本……有什么解决方案吗?如何在 firebase 规则中保护计数器?

【问题讨论】:

标签: javascript firebase firebase-realtime-database firebase-security


【解决方案1】:

如果您从前端执行计数器节点增量,您确实需要为用户分配写访问权限。没有办法避免一些恶意用户增加它。

一种解决方案是在云函数中实现计数器更新。 Cloud Functions 在后端执行并绕过所有安全规则(由于它们在后端运行,因此它们被视为“privileged environments”)。 因此您可以拒绝对计数器节点的任何写访问。

您应该使用更新post 时触发的云函数,请参阅https://firebase.google.com/docs/functions/database-events

【讨论】:

  • 哦,谢谢你的回答。我会试试云功能,谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 2021-04-03
  • 2015-05-24
  • 1970-01-01
  • 2017-08-12
  • 2016-10-23
  • 2020-01-15
相关资源
最近更新 更多