Firebase的云函数中的event.data.adminRef事务被拒绝,权限被拒绝
我最近使用一个具有默认权限的测试数据库为Firebase编写了一些云函数。当我使用主数据库上的函数(具有许多权限)时,收到了一系列警告,如: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 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”}
。未看到错误。您的操作是否仍然失败?发布您的安全规则。