Firestore - 云功能 - 获取删除文档的用户的 uid

Posted

技术标签:

【中文标题】Firestore - 云功能 - 获取删除文档的用户的 uid【英文标题】:Firestore - Cloud functions - Get uid of user who deleted a document 【发布时间】:2022-01-21 07:22:42 【问题描述】:

我正在尝试在删除 firestore 中的文档的任何经过身份验证的用户的 onWrite 云函数中获取 UID(不是没有此问题的实时数据库)。原因是......我正在尝试创建对集合中的文档执行的所有操作的日志。我必须使用云功能,因为客户端可以假设创建/编辑/删除文档,然后阻止发送相应的日志条目。

我在其他 *** 问题中看到过:

Firestore - Cloud Functions - Get uid Getting the user id from a Firestore Trigger in Cloud Functions for Firebase?

Firestore 不会在 onWrite 函数中包含任何用于 firestore 的身份验证数据,并且可接受的解决方法是在正在创建/更新的文档中包含 updated_bycreated_bycreated_atupdated_at 等字段使用 Firebase 权限进行验证。这对于插入或更新的文档非常有用,但在onWrite 云函数中删除的文档只有change.before 数据,没有change.after 数据,这意味着您无法查看谁删除了文档,最多也无法查看谁更新了文档删除前最后的文档。

我正在尝试以下一些变通方法(但他们有严重的批评者):

在文档被删除之前发送更新。 问题 -> 可能存在时间问题、去抖动问题、需要混乱的权限以确保仅在文档进行更新时才将其删除。 使用标记删除的字段更新它,并在云函数中监视此标记,然后执行删除。 问题 -> 导致项目被删除之前的延迟非常明显。

有没有人有更好的方法来做这样的事情?谢谢!

【问题讨论】:

【参考方案1】:

    根本不要删除文档。只需添加一个名为“deleted”的字段,将其设置为 true,然后添加另一个字段,其中包含删除它的用户的 UID。在查询中使用这些新字段来决定是否要处理任何给定查询的已删除文档。

    在记录删除的单独集合中使用不同的文档。每当您需要知道文档是否已被删除时,都可以查询该集合。或者在标记删除的不同数据库中创建不同的记录。

真的没有其他选择。使用现有文档或创建新文档来记录更改。现有文档是唯一可以查询的内容 - 您无法查询 Firestore 中不存在的数据。

【讨论】:

谢谢道格。我非常感谢快速响应。您概述的两个选项似乎都可行,并且比我目前的解决方案尝试更好。我会接受这个作为答案。

以上是关于Firestore - 云功能 - 获取删除文档的用户的 uid的主要内容,如果未能解决你的问题,请参考以下文章

使用云功能更新 Firestore 文档

Firestore + 云功能:如何从另一个文档中读取

Firebase 云功能与 Firestore 返回“已超过截止日期”

如何使用云功能从 Firestore 中删除数据

如何从云功能中移动 Firestore 文档?

Firestore 中的重复文档可以通过文档编辑的云功能进行更新吗?