2017-02-24 12 views
1

ノードSDK上のデータベースにアクセスして、私は下に述べたように、私はNode.jsのコードを持っているhttps://firebase.google.com/docs/database/admin/startFirebase 3.6.9エラー:PERMISSION_DENIEDは

を参照しています:

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 consoleAuthenticationタブを見て、そのユーザーの列User UIDにあるものを確認してください。同じ名前を使用していることを確認してください。それ以外は、すべてがうまくいくはずです。

一般に、uidは複雑な自動生成文字列です。私はあなたが入力しているもののようなカスタム文字列をどのように作成できるかはわかりません。

+0

https://firebase.google.com/docs/database/admin/startに記載されているコードスニペットはどうですか? – manntsheth

+0

@manntshethあなたが参照するドキュメントには「このカスタム認証オブジェクトあなたのセキュリティルールであなたのサービスを表現するために使用した識別子に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'" 
    } 
} 
} 
関連する問題