所以我正在使用"云功能"来自Firebase,我正在尝试设置具有有限权限的Admin SDK身份验证,如Firebase文档中所述。 https://firebase.google.com/docs/database/admin/start
所以我的index.js文件所有代码都是这样的:
const functions = require('firebase-functions');
var admin = require("firebase-admin")
var serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://databaseName.firebaseio.com",
databaseAuthVariableOverride: {
uid: "adminsOnly"
}
})
//Get a reference to the root of the database
var db = admin.database();
var ref = db.ref();
exports.tryFunction = functions.https.onRequest((req, res) => {
console.log('Started the tryFunction');
//Read once from database
ref.child('participants').once('value').then(function(snapshot) {
console.log(snapshot.val());
res.send("Function exectued");
})
})

所以你在那里看到的是,我试图使用HTTP触发器来触发一个函数,然后该函数应该以" console.log"的形式给我结果。 但出于某种原因,我在控制台日志中看到的所有内容都是一条错误消息,其中显示"功能执行耗时60002ms,完成状态:'超时'"。 但是当我将我的代码更改为你在下面看到的内容时,一切正常(我在日志中得到了我的结果,也没有超时)但我当然也失去了我的有限权限设置,这破坏了我们的目的。我想做什么。
const functions = require('firebase-functions');
var admin = require("firebase-admin")
var serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp(functions.config().firebase)
//Get a reference to the root of the database
var db = admin.database();
var ref = db.ref();
exports.tryFunction = functions.https.onRequest((req, res) => {
console.log('Started the tryFunction');
//Read once from database
ref.child('participants').once('value').then(function(snapshot) {
console.log(snapshot.val());
res.send("Function exectued");
})
})

这只是我实际尝试做的简化版本,但正如您所看到的,我甚至无法让这个简化示例正常运行。
我想在这里提到的一件事是,当我使用第一个代码片段中的代码时,使用数据库触发器和“事件数据库”来读取和写入数据库。方法工作正常。(我可以访问我的所有数据并保存)只是使用此HTTP触发器,我无法使我的代码工作。 对于任何想知道它是否只是我的数据库规则集的错误的人,不,不是我多次检查我的规则,甚至将.read和.write设置为true,但它仍然不能使用代码从第一个片段开始。
当然,在我的实际index.js中,我用我的实际文件名替换了serviceAccoutKey.json,并将databaseName替换为我的实际数据库链接。
所以我希望这是有道理的,我也希望有人可以帮助我,所以提前谢谢,如果有些事情仍然不清楚,请告诉我。
更新:
因此,在将.catch
添加到我的代码后,它现在看起来像这样:
exports.tryFunction = functions.https.onRequest((req, res) => {
console.log('Started the tryFunction');
//Read once from database
ref.child('participants').once('value').then(function(snapshot) {
console.log(snapshot.val());
res.send("Function exectued");
}).catch(error => {
console.log(error);
res.send(error);
})
})

更新#2: console screenshot