【问题标题】:Firebase Admin SDK Not Reading, Writing, or Throwing Errors (Node.js)Firebase Admin SDK 不读取、写入或抛出错误 (Node.js)
【发布时间】:2021-12-18 13:15:37
【问题描述】:

此问题之前已关闭,告诉我“更新问题,使其仅关注一个问题;”我不知道问题是什么,如果我知道了,我不会发布这个问题。无论如何,我会在这里做一些澄清:

  1. 我之前只使用普通的 Firebase 模块(使用“npm i firebase”导入的模块);之前一切都很完美。该问题与 Firebase Admin SDK 的身份验证(据我所知)有关。我不明白我应该如何将它发送到 Heroku 构建而不显示我的 GitHub 上的服务帐户密钥 JSON 文件。

  2. 至于 GOOGLE_APPLICATION_CREDENTIALS 路径,有没有一种方法可以让我不必在每个会话中都设置它? Heroku 应用程序每天重新启动一次,我需要以某种方式自动执行此输入过程(或完全跳过它)。这就是我目前的理解方式。以下是上一个答案的引述:

当我设置 GOOGLE_APPLICATION_CREDENTIALS 路径时,这不是只在我的本地机器上设置的吗?

环境变量仅适用于已设置它们的单个机器和进程。如果您希望将其设置在另一台机器和进程上,则必须单独安排。根据文档:

将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含您的服务帐号密钥的 JSON 文件的文件路径。 此变量仅适用于您当前的 shell 会话,因此如果您打开一个新会话,请重新设置该变量。

  1. 我的主要问题如下:“我错误地实现了 Firebase Admin SDK。我该如何以正确的方式做到这一点?”

  2. 即使只是发布一个可以提供帮助的指南链接也将不胜感激(尽管我知道这通常是不鼓励的,因为链接有时会断开)。


原文:

注意:这是我第一次使用 Firebase Admin SDK,所以我真的不确定自己在做什么(虽然我已经使用过很多次 Firebase)。

最近,我决定回到我的一个较旧的 Discord 机器人并正确验证其对 Firebase 的请求(我以前没有这样做过,因为我以前从未从服务器进行过身份验证,并且不认为它是可能的)。我发现了 Firebase Admin SDK,它听起来非常适合我的需求(该机器人托管在 Heroku 上,作为记录)。

我找到了本指南:https://firebase.google.com/docs/admin/setup,但有些事情我无法理解(请注意,这些纯粹是修辞,您无需在回答中回答它们;我只是提供以便您了解我的思维过程):

  • 当我设置 GOOGLE_APPLICATION_CREDENTIALS 路径时,这不是只在我的本地计算机上设置它吗?我也可以尝试在服务器上运行导出命令(在 CLI 中使用“heroku run”),但路径将指向服务器上不存在的文件(因为服务帐户密钥 JSON 文件已打开我的本地机器)。我需要在 Heroku 中设置环境变量吗?
  • “admin.credential.applicationDefault()”如何知道如何获取凭据?

我找不到任何其他有意义的指南。

我目前的设置方式一定是错误的,因为读取和写入会静默失败。

Firebase 设置代码:

// Setup Firebase:
const admin = require('firebase-admin');

// Initialize Firebase:
admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: "https://<APP>.firebaseio.com" // I removed the actual <APP> name to ask this question
});

let database = admin.database();

database.ref("test").set("Hello World!"); 之类的内容不会更改数据库中的数据,也不会引发任何错误(我也尝试将 .then 和 .catch 附加到此末尾;仍然没有)。这是在我切换到 Firebase Admin SDK 之前工作的(我之前只是使用“firebase”模块,而不是我现在使用的“firebase-admin”模块)。读取数据也是如此。

任何帮助将不胜感激。

【问题讨论】:

  • 您引用的“答案”仍然正确。看来您主要是在询问如何在 Heroku 上设置环境变量。我会重写您的问题以更具体地说明这一点,因为您遇到问题的并不是管理 SDK。
  • @DougStevenson 我已经知道如何设置环境变量了;服务帐户密钥信息存储在 JSON 文件中。
  • 好的,我不清楚你的问题是什么。实际上,我在您的帖子中阅读了两个问题 - 我建议将其澄清为一个问题,该问题解释了哪些问题没有按您期望的方式工作,或者您在哪里遇到了这个问题。

标签: firebase heroku firebase-realtime-database firebase-admin


【解决方案1】:

这是我的问题:

我在异步 firebase 调用之外发送 res.status(200),在 firebase 有机会完成之前终止了请求。不知何故 localhost 允许它正常工作,但是当它托管的东西横向运行时。

所以我有这个

fireabse.database().ref('parent/foo').set('bar');
res.status(200)

我需要这个:

firebase.database().ref('parent/foo').set('bar').then(() => {
   res.status(200);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2021-05-20
    • 2021-12-21
    • 2018-05-17
    相关资源
    最近更新 更多