2017-02-24 46 views
1

我指的是https://firebase.google.com/docs/database/admin/start火力地堡3.6.9错误:PERMISSION_DENIED在节点访问数据库SDK

我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,一切正常,没有配置问题。

+0

请记住,[规则不是过滤器(https://firebase.google.com/docs/database/security/固定数据#rules_are_not_filters)。如果你正在查询'/ users',那么你需要一个允许在该级别读取**的规则,而不是在它之下的级别。 – Kato

+0

谢谢@Kato ... – manntsheth

回答

0

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

一般而言,uid是一个复杂的自动生成的字符串。我不确定你将如何创建一个自定义字符串,例如你正在输入的字符串。

+0

但是https://firebase.google.com/docs/database/admin/start – manntsheth

+0

@manntsheth提到的代码片断如何注意您引用的文档的内容:“在此自定义auth对象,请在您的安全规则中将uid字段设置为用于表示您的服务的标识符。“那么,您是否在使用uid来引用您的实际服务帐户,而不仅仅是“我的服务人员”? –

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'" 
    } 
} 
}