Firebase" 。一旦('值')"管理员SDK使用'有限权限'

时间:2017-08-23 18:18:43

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

所以我正在使用"云功能"来自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

0 个答案:

没有答案