2017-02-24 38 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'" 
    } 
} 
}