Firebase Cloud Functions 中的 event.data.adminRef 事务被拒绝并显示perm



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

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

经过一番搜索,我发现了adminRef并将我所有的ref都更改为adminRef。我再次触发了函数,但仍然收到相同的错误。下面是其中一个函数的代码及其生成的日志。

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

我发现了一个关于adminReftransaction函数的类似问题。

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

希望对您有所帮助。

最新更新