【问题标题】:Cloud Functions for Firebase: How to read/write to database as an existing user?Cloud Functions for Firebase:如何以现有用户身份读/写数据库?
【发布时间】:2017-11-01 02:21:18
【问题描述】:

我喜欢使用 firebase 函数来测试我定义的 firebase 规则。

我想以现有用户的身份读/写实时数据库,以测试规则是否按预期工作。

我读过getting started page,我可以以管理员身份写入实时数据库,如下所示: admin.database().ref('/messages').push({original: 'some text'});

如何以我在 firebase 中创建的用户而不是管理员身份执行相同操作?

【问题讨论】:

  • 你写的是什么函数?数据库触发器?
  • 你好Doug,我想写一个Http函数;该函数将以我已经创建的用户身份写入实时数据库。根据返回结果,我可以判断我定义的规则是否正确。

标签: firebase firebase-realtime-database firebase-authentication google-cloud-functions


【解决方案1】:

我相信当您从触发事件中获取 Delta 快照 时,该快照的当前状态与用户相关联。由于 Firebase 团队为您提供了无服务器环境,因此他们还附加了管理员,因为它位于安全位置。

因此,只需从当前快照中获取 ref,您就可以测试数据库规则。澄清一下,我说的是snapshot.ref,而不是snapshot.adminRef

这是来自他们documentation的参考:

返回对发生触发写入的数据库位置的引用。此参考与执行写入的客户端具有相同的最终用户权限。因此,如果未经身份验证的客户端进行了写入,则此引用是未经身份验证的。如果执行写入的客户端被认证为某个 Firebase Auth 用户,则此参考被认证为同一用户。

【讨论】:

  • 感谢 JamWils。我希望能够以我创建的现有用户的身份写入实时数据库。然后从返回的结果(回调/promise)中,我可以发现我定义的安全规则是否有效。
  • 是的,使用事件中的 Delta Snapshot 并获取该 ref,应该获得用户的许可。这就是我写snapshot.ref 时所指的内容。在事件到来的情况下,我认为您正在寻找event.data.ref
猜你喜欢
  • 2017-08-03
  • 2017-11-12
  • 2018-06-29
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
相关资源
最近更新 更多