Firebase Functions 1.0.0迁移:使用Google服务帐户凭据的自定义initializeApp()出现问题

Firebase Functions 1.0.0迁移:使用Google服务帐户凭据的自定义initializeApp()出现问题,firebase,google-cloud-storage,google-cloud-functions,firebase-admin,Firebase,Google Cloud Storage,Google Cloud Functions,Firebase Admin,我刚刚从beta版(v0.9.1)升级到v1.0.0,在初始化时遇到了一些问题。根据,functions.config().firebase现在已被弃用。以下是我之前的初始化: const serviceAccount = require('../service-account.json') admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: functions.co

我刚刚从beta版(v0.9.1)升级到v1.0.0,在初始化时遇到了一些问题。根据,
functions.config().firebase
现在已被弃用。以下是我之前的初始化:

const serviceAccount = require('../service-account.json')

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: functions.config().firebase.databaseURL,
  storageBucket: functions.config().firebase.storageBucket,
  projectId: functions.config().firebase.projectId,
})
以下是升级后我将其更改为的内容:

admin.initializeApp()
起初,这似乎很好,databaseURL和storageBucket正在被识别。但是,新缺少的
凭证
字段存在问题。该字段是访问Google云存储所必需的。我在我的应用程序中访问
@google cloud/storage
API,如下所示:

import { Bucket, File } from '@google-cloud/storage'
import * as admin from 'firebase-admin'

bucket: Bucket = admin.storage().bucket()

    this.bucket
      .upload(filepath, {
        destination: uploadPath,
      })
      .then((fileTuple: [File]) => {
        // after uploading, save a reference to the audio file in the DB
        fileTuple[0]
          .getSignedUrl({ action: 'read', expires: '03-17-2025' })
          .then((url: [string]) => {
            dbRef.child('audioFiles').push(url[0])
          })
          .catch(err => console.log('Error:', err))

        console.log(`${filepath} uploaded to ${this.bucket.name}.`)
      })
这会将文件上载到存储器,然后将签名的URL插入我的实时数据库

迁移后,这段代码会出现以下错误:

SigningError: Cannot sign data without `client_email`
由于
client\u email
service account.json
上的一个字段,我怀疑我需要重新插入
凭据,如下所示:

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
})
但是,当我尝试此操作时,会出现如下错误:
错误:无法确定Firebase数据库URL。
错误:未指定Bucket name或Bucket name无效。
。因此,如果我手动插入
credential
,它似乎也希望手动插入
databaseURL
storageBucket


所以问题是,我如何做到这一点?

我自己解决了。我必须像这样重写我的初始化调用:

const serviceAccount = require('../service-account.json')
const firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG)

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: firebaseConfig.databaseURL,
  storageBucket: firebaseConfig.storageBucket,
  projectId: firebaseConfig.projectId,
})