Nach Allowing write access only to Cloud Functions for Firebase um Benutzer uid und andere Authentifizierungsinformationen für Datenbank festgelegten Regeln Ihre Funktion wie folgt sein sollte:und festlegen Cloud-Funktionen für die Firebase uid in Datenbank-Regeln verwendet werden
var functions = require('firebase-functions');
var admin = require('firebase-admin');
exports.foo = functions.database.ref('/bar')
.onWrite(event => {
var firebaseConfig = functions.config().firebase;
firebaseConfig.databaseAuthVariableOverride = {
uid: 'some-uid',
foo: true,
bar: false
};
admin.initializeApp(firebaseConfig);
...
}
Aber wenn wir Führen Sie diesen Code in unserer Funktion erhalten wir den folgenden Fehler:
Also was ist falsch in diesem Code? Ist das der richtige Weg, um uid zu setzen? Oder gibt es eine (nicht) dokumentierte UID für Funktionen oder eine andere Möglichkeit, eine Regel zu setzen, die nur Schreibvorgänge von Cloud-Funktionen erlaubt?
UPDATE - GELÖST
Wir dieses Problem gelöst wurde, war das Problem, dass die referenzierte Antwort ist (glaube ich) für Google Cloud Funktionen und wir sind eine Wolke Funktion für Firebase zu schreiben.
In Cloud-Funktionen für die Firebase, event.data
ist ein DeltaSnapshot Objekt, das ref
und adminRef
Eigenschaften aufweist. ref
hat den gleichen Zugriff wie der Benutzer, der das Ereignis ausgelöst hat, während adminRef
unbeschränkte Lese-/Schreib-Privilegien hat. Damit nur die Funktion in einen Pfad schreiben kann, muss die Schreibaktion in Regeln verweigert werden, und die Funktion muss mit adminRef
schreiben.
Dies wurde dank der Antwort für Some Firebase security rules apply for admin in Cloud Functions und Google documentation for DeltaSnapshot gelöst gelöst.