Firebase的喜欢/不喜欢功能 [英] Like/Dislike function for Firebase
本文介绍了Firebase的喜欢/不喜欢功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
该系统本身很容易理解,但实现起来却很棘手。此外,安全原因让我思考如何做到这一点。
我想让函数在前端Firebase脚本中工作,只需在那里做所有事情,检查是否已经有这个用户发布的喜欢/不喜欢,如果用户点击,则删除/添加/切换。问题出在这个方法的安全性上:用户不能创建一个不检查是否发布了类似内容的新函数吗?
如果这是可能的,这个系统应该如何工作?现在我的逻辑是:
Clicked like:
locally activate/deactivate like button and remove dislike active class if on
check docs for this user/doc like
`1`? -> remove this doc from collection
`0`? -> switch to `1`, because `0` is dislike
`undefined`? -> create doc with `vote: 1`
change (+1/-1 or +2/-2) the value of post votes fields
厌恶也是如此。但对于这么小的功能来说,这听起来真的很复杂。也许有可能在不损失安全级别的情况下,通过用户/投票来挥动额外的集合?或者使用http触发器可能会在某种程度上对此有所帮助?在一些类似PHP的语言上,这个功能会容易得多,所以我现在吓坏了。
推荐答案
以下是我的假设。
- 您有一个具有唯一ID的帖子,我们称其为
post_id
- 您有一个具有唯一ID的用户,我们称其为
user_id
- 有3种有效状态:(未定义)、(喜欢)、(不喜欢)
基本流程遵循
为了存储喜欢/不喜欢的内容,您创建了一个名为feelings
的集合,该集合使用post_id
+‘:’+user_id
作为文档ID(这样便于查找)。
feelings
中的文档有一个名为state
的字段,该字段存储-1
表示不喜欢,1
表示喜欢。
正如您所提到的,您只需将此值设置或覆盖为用户希望的任何值。如果他们决定删除他们的"感觉",并且既不喜欢也不喜欢,则发出一个删除命令(这比执行写入操作将状态设置为0要便宜)。
使用云函数监听feelings
集合,并根据此状态更改(或创建/删除)的方式更新发布文档的点赞/不点赞计数。
安全规则只能强制-1
和1
的状态,如果您使用的是Firebase身份验证,则可以简单地强制仅允许匹配的用户user_id
能够更改状态。
您现在有什么?
您现在拥有了一个具有以下属性的系统:
- 用户可以喜欢和不喜欢帖子
- 用户可以删除和/或更改他们的喜好
- 用户只能喜欢或不喜欢一个帖子一次,不能重复
- 只有有效状态(LIKE、ADLIKE)才能写入数据库
- 只有用户可以更新其喜欢/不喜欢的内容
- 可伸缩:无论是10个帖子,还是数百万个帖子,这个系统都可以工作
奖金积分
使用您注册的相同Cloud Functions事件来更新计数,您还可以使用它在LIKE和DISLIKE数组中的用户ID列表中添加或删除。这将允许您列出喜欢或不喜欢帖子的用户,而不必查询feelings
集合中的每个单独文档
还请记住,Cloud Functions对于单个事件被触发不止一次的可能性很小。如果你想保证计数是准确的,要么使代码幂等,要么只有一个手动触发的‘重新计数’过程,如果你或用户检测到计数似乎少了一分,你可以触发它。
这篇关于Firebase的喜欢/不喜欢功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文