Firebase云功能管理员

时间:2018-01-05 17:52:24

标签: firebase firebase-authentication google-cloud-functions

我试图在多个文件中拆分我的所有功能,但我遇到了firebase-admin初始化的问题。 我的第一个文件是这样的:

const functions = require('firebase-functions');
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)
const userHandler = require('./user')

和第二个文件user.js

const functions = require('firebase-functions')
const admin = require('firebase-admin')
...
exports.update = (req, res) => {
   admin.auth().verifyIdToken(req.body).catch(error => {console.log(error)}
}

所有在一个文件中它完美地工作,在2个单独的文件中给我这个错误:

ReferenceError: ISTANCE_NAME is not defined

我无法在user.js中执行第二次initializeApp,因为firebase会抛出错误:

  

错误:默认的Firebase应用已存在。这意味着你打过电话   initializeApp()不止一次提供应用程序名称   第二个论点。在大多数情况下,您只需要调用initializeApp()   一旦。但是,如果您确实要初始化多个应用程序,请传递一秒钟   initializeApp()的参数,为每个应用程序提供唯一的名称。

如何在2个文件中使用相同的admin共享权限? 我还尝试将initializeApp函数放在另一个文件中并导入但不起作用,同样的错误(ISTANCE_NAME未定义)

1 个答案:

答案 0 :(得分:0)

这是一个很好的问题。

因此,您只能打一次admin.initializeApp()

index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)
const userHandler = require('./user')

user.js

const admin = require('firebase-admin')

您无需再次初始化。首次初始化后,配置将正确存储。

或者,您可以做一些更复杂的事情,例如getAdmin()函数。

我过去做的方式是定义函数并使用 handler 函数制作单独的文件,看起来像

updateHandler(req, res, admin); // or the other
updateHander(whateverParamsToOtherFile);

注意

必须从index.js文件中导出所有功能,才能正确部署在Firebase上。我建议使用index.js存储所有功能,并从其他文件中调用处理程序。

通过参数传递,您可以获得想要的结果。但是在admin.initializeApp()的特定情况下,如果在index.js中进行了初始化,它将在其他文件中正常工作。