【问题标题】:How to make firebase database rule work with admin.database().ref (cloud function)如何使 firebase 数据库规则与 admin.database().ref 一起使用(云功能)
【发布时间】:2017-09-28 04:20:10
【问题描述】:

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

我有一个实时数据库,其中包含一组规则,例如;名称必须是字符串且长度 >= 50,...

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

所以,我想知道有没有办法让它工作?我在想:

  1. 找到替换 admin.database() 的东西(看看 event.data.ref 已经,但这在我的情况下不起作用 - HTTP 请求)
  2. 在云功能中验证数据(不好)

你能给我一些提示/线索吗?

【问题讨论】:

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


    【解决方案1】:

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

    如果您想限制代码可以执行的操作,可以将其初始化为作为特定 UID 运行。来自Authenticate with limited privileges的文档:

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

    ...

    然后,在您的服务器上,当您初始化 Firebase 应用时,使用 databaseAuthVariableOverride 选项覆盖您的数据库规则使用的身份验证对象。在此自定义身份验证对象中,将 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"
      }
    });
    

    请查看完整示例的链接文档。

    【讨论】:

    • 弗兰克,您能否更新您的答案以处理 Cloud Functions 的 functions.config().firebase
    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 2017-10-12
    • 2018-05-29
    • 2020-05-28
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多