我是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密钥访问(读/写)数据
答案 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();
})