Firebase管理SDK未读取、写入或抛出错误(Node.js)

Firebase管理SDK未读取、写入或抛出错误(Node.js),firebase,heroku,firebase-realtime-database,firebase-admin,Firebase,Heroku,Firebase Realtime Database,Firebase Admin,这个问题之前已经结束了,告诉我“更新问题,使其只关注一个问题”;我不知道问题是什么,如果我知道了,我就不会发布这个问题。无论如何,我将在这里澄清: 我以前只使用普通的Firebase模块(使用“npm I Firebase”导入的模块);以前一切都很好。这个问题与Firebase Admin SDK的身份验证有关(据我所知)。我不明白我应该如何在不透露GitHub上的服务帐户密钥JSON文件的情况下将此发送到Heroku构建 至于GOOGLE_应用程序_凭据路径,有没有一种方法不必在每次会话中

这个问题之前已经结束了,告诉我“更新问题,使其只关注一个问题”;我不知道问题是什么,如果我知道了,我就不会发布这个问题。无论如何,我将在这里澄清:

  • 我以前只使用普通的Firebase模块(使用“npm I Firebase”导入的模块);以前一切都很好。这个问题与Firebase Admin SDK的身份验证有关(据我所知)。我不明白我应该如何在不透露GitHub上的服务帐户密钥JSON文件的情况下将此发送到Heroku构建

  • 至于GOOGLE_应用程序_凭据路径,有没有一种方法不必在每次会话中都设置它?Heroku应用程序每天重新启动一次,我需要以某种方式自动化这个输入过程(或者完全跳过它)。这就是我目前的理解方式。这里引用了之前的一个答案:

  • 当我设置GOOGLE_应用程序_凭据路径时,这不是只在本地机器上设置吗

    环境变量只在单独的机器和进程上起作用。如果你想在另一台机器上进行设置,你必须单独安排。根据文件:

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

  • 我的主要问题如下:“我错误地实现了Firebase Admin SDK。如何正确地实现?”

  • 即使只是发布一个有帮助的指南链接也会很感激(尽管我知道这通常是不鼓励的,因为链接有时会断开)


  • 原件: 注意:这是我第一次使用Firebase管理SDK,所以我真的不确定我在做什么(尽管我已经使用了Firebase很多次)

    最近,我决定回到我的一个旧的Discord机器人,并实际验证它对Firebase的请求(我以前没有这样做,因为我以前从未从服务器验证过,也不认为这是可能的)。我发现了Firebase Admin SDK,它听起来非常适合我的需要(为了记录在案,这个机器人被托管在Heroku上)

    我找到了这本指南:,但有几件事我想不起来(请注意,这些都是纯粹的修辞,你不需要在回答中回答它们;我只是提供它们,以便你能理解我的思维过程):

    • 当我设置GOOGLE_应用程序_凭据路径时,这不是只在本地机器上设置吗?我也可以尝试在服务器上运行export命令(在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();
    
    //安装Firebase:
    const admin=require('firebase-admin');
    //初始化Firebase:
    admin.initializeApp({
    凭据:admin.credential.applicationDefault(),
    数据库URL:“https://.firebaseio.com“//我删除了实际名称以询问此问题
    });
    让database=admin.database();
    
    比如
    database.ref(“test”).set(“helloworld!”)不更改数据库中的数据,并且不会引发任何错误(我还尝试在末尾附加.then和.catch;仍然没有任何错误)。这在我切换到Firebase Admin SDK之前就已经起作用了(我以前只是使用“Firebase”模块,而不是现在使用的“Firebase Admin”模块)。读取数据也是如此


    任何帮助都将不胜感激。

    您引用的“答案”仍然正确。似乎您主要是询问如何在Heroku上设置环境变量。我会将您的问题改写为更具体的问题,因为您遇到的问题并不是真正的管理SDK。@DougStevenson我已经知道如何设置环境变量;服务帐户密钥信息存储在JSON文件中。好的,我不清楚您的问题是什么。事实上,我在你的帖子中读到了两个问题——我建议把它归结为一个问题,解释什么东西没有按你期望的方式工作,或者你被困在什么地方。