nodejs app

时间:2016-07-20 08:56:49

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

我是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方法不会#39; t存在)。我不想允许匿名访问,如果有有效的API密钥,我想访问。



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




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

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

3 个答案:

答案 0 :(得分:1)

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

要使用Firebase从您的node.js流程进行身份验证,您必须关注其中一个methods outlined in the documentation。所有这些都需要以某种方式使用服务帐户,以直接访问数据库或签署自定义令牌。这就是Firebase身份验证为服务器端进程工作的方式,而无法避免它。

答案 1 :(得分:1)

您规则的当前问题是:



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




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

同样在将来我建议使用!== over the!=来改善可靠性

答案 2 :(得分:0)

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

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