如何使用admin.database()使firebase数据库规则工作.ref(云函数)

时间:2017-09-28 04:20:10

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

我正在使用Cloud Function for Firebase。当我使用admin.database().ref时,将忽略应用于数据库的所有规则。有了admin,我可以做任何事情。要明确:

我有一个实时数据库,有一套规则,如; name必须是字符串和长度> = 50,...

使用SDK时,所有无效数据都将被拒绝。但是当我开始使用firebase云功能(通过提供一组https端点来减少客户端的工作)时,它已经不再适用了。

所以,我想知道是否有办法让它发挥作用?我在考虑:

  1. 找到替代admin.database()的内容(看一看 已经event.data.ref但这在我的情况下不起作用 - HTTP请求)
  2. 验证云功能中的数据(不太好)
  3. 你能给我一些提示/线索吗?

1 个答案:

答案 0 :(得分:1)

这是Firebase管理SDK的预期默认行为:代码以管理权限访问数据库。

如果要限制代码的功能,可以将其初始化为特定的UID运行。来自Authenticate with limited privileges的文档:

  

要对Firebase应用实例可以访问的资源进行更细粒度的控制,请使用安全规则中的唯一标识符来表示您的服务。

     

...

     

然后,在您的服务器上,初始化Firebase应用时,使用databaseAuthVariableOverride选项覆盖数据库规则使用的auth对象。在此自定义身份验证对象中,将uid字段设置为您在安全规则中用于表示服务的标识符。

// Initialize the app with a custom auth variable, limiting the server's access
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: "my-service-worker"
  }
});

请参阅完整示例的链接文档。