Firebase的云函数中的event.data.adminRef事务被拒绝,权限被拒绝

Firebase的云函数中的event.data.adminRef事务被拒绝,权限被拒绝,firebase,firebase-realtime-database,firebase-security,google-cloud-functions,Firebase,Firebase Realtime Database,Firebase Security,Google Cloud Functions,我最近使用一个具有默认权限的测试数据库为Firebase编写了一些云函数。当我使用主数据库上的函数(具有许多权限)时,收到了一系列警告,如: FIREBASE WARNING: transaction at /some/path/to/value failed: permission_denied 经过一些搜索,我找到了关于adminRef的信息,并将我所有的refs更改为adminRefs。我再次触发了函数,但仍然得到相同的错误。下面是其中一个函数及其生成的日志的代码 "use strict

我最近使用一个具有默认权限的测试数据库为Firebase编写了一些云函数。当我使用主数据库上的函数(具有许多权限)时,收到了一系列警告,如:

FIREBASE WARNING: transaction at /some/path/to/value failed: permission_denied
经过一些搜索,我找到了关于
adminRef
的信息,并将我所有的
ref
s更改为
adminRef
s。我再次触发了函数,但仍然得到相同的错误。下面是其中一个函数及其生成的日志的代码

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

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 
以下是这些树的一般规则

{
  "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"
    }
  }
}
我也试过了,但错误依然存在

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    }
  }
这可能有助于:

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

我发现了一个与
adminRef
transaction
函数类似的问题

请看这里:


希望有帮助。

我做了一次编辑,将
event.data.adminRef.root.child('tree2').child(
更改为
event.data.adminRef.child('tree2').child(
啊,谢谢,我错过了这一点;不过还是出现了错误。我复制并运行了你的代码,规则是:
{.read:“auth!=null”,“.write:“auth!=null”}
。未看到错误。您的操作是否仍然失败?发布您的安全规则。