【问题标题】:Firebase security rules for nodejs appnodejs 应用程序的 Firebase 安全规则
【发布时间】:2016-11-23 10:07:34
【问题描述】:

我是 Firebase 的新手。我在下面给出了代码-

var config = {
    apiKey: ".....",
    authDomain: "....",
    databaseURL: ".....",
    storageBucket: "...."
};

firebase.initializeApp(config);

function writeData(socialType, userName, name, message) {
   database.ref("/" + socialType + "/" + userName + "/").set({
       name: name,
       message: message
   });
}
writeData("fb", "Jhon", "booo1", "message1");

我想知道这些类型的安全规则应该是什么(我的意思是使用 api 密钥访问,并且没有登录。实际上在 firebase nodejs 库 firebase.auth() 上,auth 方法没有不存在)。我不想允许匿名访问,如果有有效的 api 密钥,我想允许访问。

{
 "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

对于此安全规则,我收到 permission_denied 错误。这可能是有道理的,因为没有 auth 因为我没有进行身份验证,而是通过 api 密钥访问。

注意:我不想使用服务帐户。我想使用 api key 来访问(读/写)数据

【问题讨论】:

    标签: node.js firebase firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    API 密钥只是向 Firebase 服务器标识您的项目。它不会使用 Firebase 对您的 node.js 进程进行身份验证,也不会授予您访问数据库中任何数据的权限。

    要使用 Firebase 从您的 node.js 进程进行身份验证,您必须遵循 methods outlined in the documentation 之一。所有这些都需要以某种方式使用服务帐户,以直接访问数据库或签署自定义令牌。这只是 Firebase 身份验证适用于服务器端进程的方式,无法避免。

    【讨论】:

    • 我会告诉你更多的用例。我使用 Cordova(一个 javascript 框架来编写跨(android/ios)平台移动应用程序)。所以我需要将帐户信息与我一起发送,所以我真的不希望附带一个服务帐户。我的应用程序中的用户也没有登录场景。我期待更多的访问令牌类型解决方案。
    【解决方案2】:

    您的规则的当前问题是:

    {
     "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }

    因为您似乎没有登录名。如果浏览器代码具有正确的 api 密钥,您可以使用 firebase anonymous auth 来允许 auth !== null 成功。

    另外,在未来我建议使用 !== 而不是 != 来提高可靠性

    【讨论】:

      【解决方案3】:

      在访问 firestore 集合之前,您必须在每个端点上手动调用 signInWithEmail 方法。这很烦人,但没有解决方法

      return await firebase.auth().signInWithEmailAndPassword("###", "###").then(async () => {
          const user = await firebase.firestore().collection('user_info').doc('123').get()
          return user.data();
      })
      

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 2016-06-27
        • 1970-01-01
        • 2016-08-19
        • 2020-09-06
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多