0

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", 
    } 
    } 
+0

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. –

Antwort

0

helfen Dies kann:

exports.myFunction1 = functions.database.ref('tree1/{productID}/').onWrite(event => { 
    const productID = event.params.productID; 

    if (!event.data.exists()) { 
     return; 
    } 

    return event.data.adminRef.child('tree2').child(productID).transaction(function (data) { 
     let default = 0; 
     return (data === null) ? default : data; 
    }).then(() => { console.log("Transaction finished") }); 
+0

Gleicher Fehler, leider. –

+1

Ich habe eine Änderung geändert 'event.data.adminRef.root.child ('tree2'). Child (' zu 'event.data.adminRef.child ('tree2'). Child (' –

+0

Ah, danke, ich hatte verpasst, aber immer noch den Fehler. –

Verwandte Themen