Cloud Functions for Firebase中的event.data.adminRef事务被permission_denied拒绝

问题描述 投票:0回答:2

我最近使用具有默认权限的测试数据库为Firebase编写了一些Cloud Functions。当我去使用主数据库上的函数(具有许多权限)并得到一堆警告,如:

FIREBASE WARNING: transaction at /some/path/to/value failed: permission_denied

经过一番搜索,我发现了adminRef并将我所有的refs改为adminRefs。我再次触发了这些功能,但仍然遇到了同样的错误。这是其中一个函数及其生成的日志的代码。

"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",
    }
  }
firebase firebase-realtime-database firebase-security google-cloud-functions
2个回答
0
投票

这可能有所帮助:

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
投票

我发现了与transaction有关adminRef函数的类似问题。

看看这里:https://github.com/firebase/firebase-functions/issues/16#issuecomment-289094258

希望能帮助到你。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.