Firebase的喜欢/不喜欢功能 [英] Like/Dislike function for Firebase

查看:10
本文介绍了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的语言上,这个功能会容易得多,所以我现在吓坏了。

推荐答案

以下是我的假设。

  1. 您有一个具有唯一ID的帖子,我们称其为post_id
  2. 您有一个具有唯一ID的用户,我们称其为user_id
  3. 有3种有效状态:(未定义)、(喜欢)、(不喜欢)

基本流程遵循

为了存储喜欢/不喜欢的内容,您创建了一个名为feelings的集合,该集合使用post_id+‘:’+user_id作为文档ID(这样便于查找)。

feelings中的文档有一个名为state的字段,该字段存储-1表示不喜欢,1表示喜欢。

正如您所提到的,您只需将此值设置或覆盖为用户希望的任何值。如果他们决定删除他们的"感觉",并且既不喜欢也不喜欢,则发出一个删除命令(这比执行写入操作将状态设置为0要便宜)。

使用云函数监听feelings集合,并根据此状态更改(或创建/删除)的方式更新发布文档的点赞/不点赞计数。

安全规则只能强制-11的状态,如果您使用的是Firebase身份验证,则可以简单地强制仅允许匹配的用户user_id能够更改状态。

您现在有什么?

您现在拥有了一个具有以下属性的系统:

  • 用户可以喜欢和不喜欢帖子
  • 用户可以删除和/或更改他们的喜好
  • 用户只能喜欢或不喜欢一个帖子一次,不能重复
  • 只有有效状态(LIKE、ADLIKE)才能写入数据库
  • 只有用户可以更新其喜欢/不喜欢的内容
  • 可伸缩:无论是10个帖子,还是数百万个帖子,这个系统都可以工作

奖金积分

使用您注册的相同Cloud Functions事件来更新计数,您还可以使用它在LIKE和DISLIKE数组中的用户ID列表中添加或删除。这将允许您列出喜欢或不喜欢帖子的用户,而不必查询feelings集合中的每个单独文档

还请记住,Cloud Functions对于单个事件被触发不止一次的可能性很小。如果你想保证计数是准确的,要么使代码幂等,要么只有一个手动触发的‘重新计数’过程,如果你或用户检测到计数似乎少了一分,你可以触发它。

这篇关于Firebase的喜欢/不喜欢功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆