无法在谷歌云运行应用程序中使用firebase admin sdk

gopyfrb3  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(121)

我试图在我的javascript web应用程序中使用firebase admin sdk,以管理firebase用户。它可以在本地运行,但不能在Google Cloud上运行。
我可以通过使用firebase-admin库在本地机器上成功地运行它,并初始化一个应用程序如下:

export default admin.initializeApp({
        credential: admin.credential.cert(process.env.FIREBASE_CONFIG)
})

在本例中,我将cert指向直接从firebase下载的json文件。这在本地工作,但当我试图在Google Cloud Run中复制它时,我无法做到。作为参考,在cloud run中,我将此json文件存储为secret,但当我构建和部署应用程序时,它实际上不会在端口上启动和运行(如果没有此代码,这永远不会成为问题,因此意味着firebase代码是问题所在)。当我注销env变量(secret)时,它看起来与预期的完全一样。
由于这不起作用,我采取了一种不同的方法,在非本地时使用google应用程序的默认凭据(正如google文档所推荐的)。在这种情况下,我将我的逻辑设置为条件,所以当我不是本地的时候,我会使用以下内容:

export default admin.initializeApp()

这使我能够通过构建和部署错误,但是当我运行代码与firebase实际交互时,它会返回一个错误。我已经采取了许多措施来确保所有相关的firebase管理和身份API都在我的gcp环境中启用,前提是服务帐户cloud run正在使用firebase admin sdk以及我可以在线看到的所有其他选项。我还尝试指定initialize app使用默认凭据,并提供一个数据库,我在一些答案中看到了引用。
在一天结束时,我总是得到同样的错误:
FirebaseAuthError:没有与提供的标识符对应的配置。
我现在被卡住了,已经花了很多很多个小时来解决这个问题。有没有人对我如何解决这些问题有任何建议,无论是使用显式凭据还是默认凭据?任何帮助都非常感谢。谢谢!

qyyhg6bp

qyyhg6bp1#

我发现这个问题是由private_key属性的格式引起的,因为它在一些地方包含'\n',而这些地方没有被正确解释。修复方法是拆分json对象并将以下逻辑应用于private_key:

private_key: process.env.FIREBASE_PRIVATE_KEY.split(
        String.raw`\n`
).join("\n")

相关问题