Firestore分布式点赞计数器无云函数安全校验与数据同步方案咨询
不使用云函数的点赞计数器安全与同步方案
防止用户篡改点赞计数
- 替换自定义递增逻辑,直接使用Firestore原生的
FieldValue.increment()原子操作接口,配合安全规则强制校验计数字段的变化量:
该规则会直接拦截用户篡改递增值的请求,只有合法的±1变更会被放行。// 安全规则示例 match /posts/{postId} { allow update: if ( // 仅允许点赞计数每次+1或-1,不允许直接赋值任意数值 request.resource.data.likeCount == resource.data.likeCount + 1 || request.resource.data.likeCount == resource.data.likeCount - 1 ) && request.resource.data.likeCount is number; }
保证计数器与点赞记录完全同步
安全规则本身不支持集合聚合查询,但可以通过操作绑定+事务的方案从源头保证两者同步,无需统计全集合数据:
- 规范客户端操作逻辑:所有点赞/取消点赞请求必须在同一个事务中完成两个操作:
- 新增/删除单条点赞记录(建议将点赞文档ID设为
{postId}_{userId}格式,天然避免重复点赞) - 调用
FieldValue.increment(1)/FieldValue.increment(-1)修改对应帖子的点赞计数
- 新增/删除单条点赞记录(建议将点赞文档ID设为
- 在安全规则中增加绑定校验:
- 禁止单独修改帖子的点赞计数,所有计数变更必须伴随对应点赞记录的新增/删除操作
- 禁止单独新增/删除点赞记录,所有点赞记录的变更必须伴随对应帖子计数的±1操作
- 校验点赞记录的操作人和请求发起方一致,避免代刷点赞
- 该方案从操作链路强制要求计数和点赞记录一一对应,从根源上保证两者数值完全一致,无需额外的后端校验逻辑。
内容的提问来源于stack exchange,提问作者NoRyb
相关产品推荐
相关产品推荐

