gpt4 book ai didi

database - Firebase 的喜欢/不喜欢功能

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:52 28 4
gpt4 key购买 nike

系统本身很容易理解,但实现起来却很棘手。此外,安全原因让我思考如何做到这一点。

我正在考虑让这个函数在前端 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-triggers 可能会以某种方式帮助解决这个问题?这个特性在一些类似 PHP 的语言上会容易得多,所以我现在很害怕。

最佳答案

这是我的假设。

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

基本流程如下

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

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

正如您提到的,您可以简单地将此值设置或覆盖为用户想要的任何值。如果他们决定删除他们的“感觉”并且既不喜欢也不不喜欢,则发出删除命令(这比写操作将状态设置为 0 更便宜)。

使用 Cloud Functions 聆听 feelings 集合,并根据此状态如何变化(或创建/删除)来更新帖子文档喜欢/不喜欢的计数。

安全规则只能强制执行 -11 状态,如果您使用的是 Firebase Auth,您可以简单地强制只允许用户匹配 >user_id 无法更改状态。

你现在有什么?

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

  • 用户可以喜欢和不喜欢帖子
  • 用户可以删除和/或更改他们喜欢/不喜欢的内容
  • 用户只能喜欢或不喜欢一个帖子一次 - 他们不能多次这样做
  • 只有有效的状态(喜欢,不喜欢)可以写入数据库
  • 只有用户可以更新他们的好恶
  • 可扩展:无论是 10 个帖子还是数百万个帖子,这个系统都能正常工作

奖金积分

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

另请记住,Cloud Functions 有很小的机会为单个事件触发多次。如果您希望保证计数准确,请使代码幂等,或者仅具有手动触发的“重新计数”过程,您可以在您或用户检测到计数似乎偏离 1 时触发。

关于database - Firebase 的喜欢/不喜欢功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48300034/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com