删除用户账号时如何避免触发对应的Google Cloud Function?
可行实现方案
共有3种落地性较强的实现方式,可根据你的业务逻辑选择:
方案1:判断用户文档是否存在(改造成本最低)
你可以调整评论删除云函数的执行逻辑,在最开头先校验所属用户的文档状态:
- 拿到被删除评论中存储的
userId字段,调用get()方法查询users集合中对应id的文档 - 若返回结果为空,说明用户账号已经被删除,直接
return终止函数执行即可,无需执行后续的用户属性更新逻辑 - 该方案不需要修改现有删除账号、删除评论的业务代码,仅调整云函数逻辑即可,适合不想改动上游业务的场景
方案2:给评论添加临时标记字段(准确率最高)
如果你的删账号流程是先删评论再删用户文档,方案1无法生效,可选择该方案:
- 在触发批量删除用户评论前,先调用批量更新接口,给该用户的所有评论文档新增
isDeletingAccount字段,值设为true - 在评论删除云函数的开头,读取被删除评论的
isDeletingAccount字段,若值为true,直接终止函数执行
采用方案2时不需要额外清理标记字段,评论删除时整份文档会被同步移除,不会产生冗余数据
方案3:通过操作身份校验过滤
如果你的批量删评论操作是通过Admin SDK在后端执行的,可通过触发器上下文的auth信息判断:
- 云函数的
context.auth字段会标识操作的发起方,Admin SDK发起的操作对应context.auth.token.admin值为true - 若检测到是管理员身份发起的评论删除操作,直接终止函数即可
- 注意该方案会同时屏蔽管理员手动删用户评论的场景下的用户属性更新,需要确认和你的业务规则是否冲突
内容的提问来源于stack exchange,提问作者Mariana Reis Silveira
相关产品推荐
相关产品推荐

