我最近迁移了 Firebase 项目,以使用 Eventarc 触发器进行实时数据库,过渡到 Node.js 20 和 v2 架构。虽然我设法找到了跟踪用户对
set()
和 update()
操作操作的解决方法,但由于事件负载中缺少用户上下文,我在使用 remove() 方法时遇到了困难。
问题
在 Firebase Functions v1 中,
context.auth
对象提供有关用户执行操作的详细信息,这对于记录和跟踪删除至关重要。在 v2 中切换到 Eventarc 后,删除的事件负载不再包含此信息,从而很难确定谁删除了数据节点。
以下是删除事件负载的示例:
{
"subject": "refs/test/12",
"time": "2025-01-11T21:18:45.028Z",
"id": "0Us3XfpOOxpU3pYguzbfUYlymTw=",
"type": "google.firebase.database.ref.v1.deleted",
"ref": "test/12",
"location": "us-central1",
"specversion": "1.0",
"instance": "my-qa",
"source": "//firebasedatabase.googleapis.com/projects/_/locations/us-central1/instances/my-qa",
"traceparent": "00-fca58d21a6d39b231146499920c172c2-3af3d60a32c1b974-01",
"firebaseDatabaseHost": "firebaseio.com",
"params": {
"id": "12"
}
}
** 挑战**
由于
remove()
不允许添加元数据,因此没有明确的方法来跟踪谁执行了删除。这对于多个用户或系统可以与相同数据交互的应用程序提出了重大挑战,因为它损害了维护准确审核日志和执行安全协议的能力。
我的问题
使用 Eventarc 触发器时,如何跟踪负责删除 Firebase 实时数据库的用户或系统? Eventarc v2 架构中是否有针对此场景的解决方法?
在 Firebase gen1 的 Cloud Functions 上,隐式身份验证上下文可用于实时数据库,但不适用于任何其他 Firebase 产品。
在 Firebase gen2 的 Cloud Functions 上,隐式身份验证上下文可用于 Firestore,但不适用于任何其他 Firebase 产品。
Eventarc 中的底层架构也允许将其添加到其他产品中,“只是”工作尚未完成。虽然我们没有人能说出工程师的计划是什么,但我一直在 Firebase 工作直到 2024 年 7 月,在那之前没有人为实时数据库做这方面的工作,也没有任何具体的规划时间表。
虽然我当然希望 Firebase 添加此功能,但如果您今天需要了解身份验证上下文,则必须在没有隐式身份验证上下文的情况下执行此操作。我通常会选择与第 1 代 Firestore 推荐的相同方法,并且: