Ich habe kürzlich einige Cloud Functions für Firebase geschrieben, die eine Testdatenbank mit Standardberechtigungen verwenden. Wenn ich die Funktionen auf der Hauptdatenbank verwenden ging (mit vielen Berechtigungen) und bekam eine Reihe von Warnungen wie:event.data.adminRef-Transaktionen in Cloud-Funktionen für Firebase, das mit permission_denied abgelehnt wird
FIREBASE WARNING: transaction at /some/path/to/value failed: permission_denied
Nach einiger Suche fand ich über adminRef
und änderte meinen all ref
s adminRef
s. Ich habe die Funktionen erneut ausgelöst und habe immer noch die gleichen Fehler. Hier ist der Code für eine der Funktionen und die Protokolle, die er erzeugt.
"use strict";
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const moment = require('moment');
admin.initializeApp(functions.config().firebase);
exports.myFunction1 = functions.database.ref('tree1/{productID}/').onWrite(event => {
const productID = event.params.productID;
if (!event.data.exists()) {
return Promise.resolve();
}
return event.data.adminRef.root.child('tree2').child(productID).transaction(function (data) {
if (data === null) {
return {default: 'value'}
}
return data
}).then(() => { console.log("Transaction finished") });
});
Die Protokolle:
12:09:49.978 Function execution took 2599 ms, finished with status: 'error'
12:09:49.957 Error: permission_denied
at Error (native)
at Mh (/user_code/node_modules/firebase-admin/lib/database/database.js:238:437)
at Ch (/user_code/node_modules/firebase-admin/lib/database/database.js:236:351)
at /user_code/node_modules/firebase-admin/lib/database/database.js:236:286
at /user_code/node_modules/firebase-admin/lib/database/database.js:213:167
at kh.h.ud (/user_code/node_modules/firebase-admin/lib/database/database.js:214:104)
at Zg.ud (/user_code/node_modules/firebase-admin/lib/database/database.js:205:364)
at Qg.Xf (/user_code/node_modules/firebase-admin/lib/database/database.js:203:281)
at Tg (/user_code/node_modules/firebase-admin/lib/database/database.js:198:109)
at Client.Ha.onmessage (/user_code/node_modules/firebase-admin/lib/database/database.js:196:467)
12:09:49.950 FIREBASE WARNING: transaction at /tree2/xyz failed: permission_denied
Hier sind die normalen Regeln für diese Bäume
{
"rules": {
".read": "auth.uid === 'abc123'",
".write": "auth.uid === 'abc123'",
"tree1": {
".read": "auth != null",
".write": "auth != null"
},
"tree2": {
".indexOn": ["something"],
".read": "auth != null",
".write": "auth != null"
}
}
}
ich das auch versucht, aber der Fehler bestehen bleibt.
{
"rules": {
".read": "auth != null",
".write": "auth != null",
}
}
Ich kopierte und führte Ihren Code mit Regeln: '{" .read ":" auth! = Null "," .write ":" auth! = Null "}'. Habe den Fehler nicht gesehen. Scheitert es immer noch für dich? Veröffentlichen Sie Ihre Sicherheitsregeln. –