【问题标题】:How do I include my firebase service account key when using functions.config().firebase to init?使用 functions.config().firebase 进行初始化时,如何包含我的 firebase 服务帐户密钥?
【发布时间】:2018-05-30 19:29:02
【问题描述】:

我正在像这样初始化我的 firebase 函数:

admin.initializeApp(functions.config().firebase)

我已经生成了一个服务帐户密钥,我认为我需要这样做以进行身份​​验证。

它给了我一个包含各种键/值的 json 表。

说明是将其添加到 admin.initializeApp 中,如下所示:

var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});

这和我的做法很不一样。

我什至不确定我是否需要这样做,因为我确实可以使用我以前的方法访问 firestore,但是使用有效用户 id 令牌的身份验证不起作用,在 firebase 中给我以下错误:

错误:错误:解码 Firebase ID 令牌失败。确保你通过 代表 ID 令牌的整个字符串 JWT。看 https://firebase.google.com/docs/auth/admin/verify-id-tokens 为 有关如何检索 ID 令牌的详细信息。

从周围嗅探看,似乎缺少的是 admin sdk 服务帐户..

【问题讨论】:

  • 看起来传递给 verifyIdToken() 的 ID 令牌格式不正确。您可以尝试在服务器端记录它并查看结果吗?

标签: javascript firebase google-cloud-functions firebase-admin


【解决方案1】:

这个 sn-p 是为 Node.js 初始化 Firebase Admin SDK 的通用方法:

var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});

如您所见,它要求您从控制台下载 JSON 文件,并将其添加到路径中。

这有点挑剔,一些开发人员发现很难开始工作。由于 Cloud Functions 环境完全在 Firebase 的控制之下,它在那里变得更容易了一些。您的另一个 sn-p 显示如何:

admin.initializeApp()

两个 sn-ps 完成相同的事情,但后者仅适用于 Cloud Functions for Firebase。

【讨论】:

  • 啊,这是否意味着如果我使用您提供的前一个示例,在我的问题中明确传递凭据的位置应该得到解决?我确实尝试过这种方法,但弹出了同样的错误..
  • 使用任何一种方法都应该可以解码 JWT。问题可能在您的代码中的其他地方。正如 Hiranya 评论的那样,启用调试日志记录以查看它显示的内容。如果问题仍然存在,我建议使用minimal code that reproduces that problem 单独提出一个问题。
  • 看起来 admin.initializeApp(functions.config().firebase) 有效,当我将 aws 函数移动到 cors 内部时,它突然开始工作。不知道为什么。
猜你喜欢
  • 2020-12-08
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2022-10-13
  • 2018-08-14
  • 2019-10-17
相关资源
最近更新 更多