Firebase 3.6.9错误:PERMISSION_DENIED在Node SDK上访问数据库

时间:2017-02-24 17:07:42

标签: javascript firebase firebase-security

我指的是https://firebase.google.com/docs/database/admin/start

我有如下所述的node.js代码:

var admin = require("firebase-admin");
var serviceAccount = require('mySdkJSONFile');
admin.initializeApp({
    credential: admin.credential.cert({
                    projectId: "myProjectId",
                    clientEmail: "myClientEmail",
                    apiKey: "myApiKey",
                    privateKey: "myPrivateKey"
                }),
    databaseURL: "....",
    databaseAuthVariableOverride: {
        uid: "my-service-worker"
    }
});
var db = admin.database();
var usersDB = db.ref("/users");
usersDB.set({
  name: "myName",
  date: "yesterday"
});

在数据库中,规则设置为

{
 "rules": {
 "public": {
     ".read": false,
     ".write": false
  },
 "users": {
    "$uid": {
      ".read": "auth.uid == 'my-service-worker'",
      ".write": "auth.uid == 'my-service-worker'"
            }
          }
      }
}

如果是" / user"我将读取和写入权限设置为true,一切正常,没有配置问题。

2 个答案:

答案 0 :(得分:0)

您可能在使用my-service-worker帐户时遇到问题。请查看Firebase console中的Authentication标签,并检查该用户在User UID列中的内容。确保使用相同的名称。除此之外,一切都应该没问题。

通常,uid是一个复杂的自动生成字符串。我不确定如何创建自定义字符串,例如您输入的字符串。

答案 1 :(得分:0)

需要更改用户规则," $ uid"不需要。正如我在问题中提到的相同链接中所提到的(我自己发现很愚蠢)https://firebase.google.com/docs/database/admin/start

{
 "rules": {
   "public": {
      ".read": false,
      ".write": false
   },
   "users": {
     ".read": "auth.uid === 'my-service-worker'",
     ".write": "auth.uid === 'my-service-worker'"
   }
 }
}