2017-02-24 2 views
1

Ich beziehe mich auf https://firebase.google.com/docs/database/admin/startFirebase 3.6.9 Fehler: PERMISSION_DENIED Zugriff auf Datenbank auf Knoten SDK

I node.js Code haben, wie unten erwähnt:

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" 
}); 

Und in der Datenbank werden die Regeln festgelegt, wie

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

Wenn für "/ user" ich Lese- und Schreibrechte auf True setzen, funktioniert alles gut, keine Config-Probleme.

+0

Beachten Sie, dass [Regeln sind nicht Filter] (https://firebase.google.com/docs/database/security/ Sicherungsdaten # rules_are_not_filters). Wenn Sie "/ users" abfragen, benötigen Sie eine Regel, die Lesezugriff ** auf dieser Ebene ** erlaubt, nicht auf der Ebene darunter. – Kato

+0

Danke @Kato ... – manntsheth

Antwort

0

Sie haben wahrscheinlich ein Problem mit my-service-worker Konto. Werfen Sie einen Blick auf die Registerkarte Authentication in Ihrem Firebase console und überprüfen Sie, was Sie in Spalte User UID für diesen Benutzer haben. Stellen Sie sicher, dass Sie den gleichen Namen verwenden. Ansonsten sollte alles in Ordnung sein.

Im Allgemeinen ist uid eine komplexe automatisch generierte Zeichenfolge. Ich bin mir nicht sicher, wie Sie eine benutzerdefinierte Zeichenfolge wie die eingegebene Zeichenfolge erstellen können.

+0

aber was ist mit dem Code-Snippet, das unter https://firebase.google.com/docs/database/admin/start erwähnt wird – manntsheth

+0

@manntheth Beachten Sie, was das Dokument, das Sie verweisen, sagt: "In diesem benutzerdefinierten Auth-Objekt Setzen Sie das Feld "uid" auf den Bezeichner, den Sie in den Sicherheitsregeln für Ihren Dienst verwendet haben. " Also, verwenden Sie die UID, um auf Ihr tatsächliches Dienstkonto zu verweisen, und nicht nur auf meinen "Service-Mitarbeiter"? –

0

Änderung der Benutzerregeln wurde benötigt, "$ uid" wurde nicht benötigt. Wie in dem gleichen Link, ich in der Frage erwähnt (die Suche nach albern ich) 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'" 
    } 
} 
} 
Verwandte Themen