admin,但不是指向正确项目的存储



在我的项目中,我通过以下操作设置了一个开发和生产环境:

const firebaseConfig =
process.env.FUNCTIONS_EMULATOR === "true"
? {
apiKey: process.env.FIREBASE_DEV_KEY,
authDomain: "myapp-dev.firebaseapp.com",
projectId: "myapp-dev",
storageBucket: "myapp-dev.appspot.com",
messagingSenderId: "...",
appId: "...",
measurementId: "...",
}
: {
apiKey: process.env.FIREBASE_PROD_KEY,
authDomain: "myapp-production.firebaseapp.com",
projectId: "myapp-production",
storageBucket: "myapp-production.appspot.com",
messagingSenderId: "...",
appId: "...",
measurementId: "...",
}
admin.initializeApp(firebaseConfig)

然后firestore指向正确的项目,因为它是从如上所述的admin初始化的:

const firestore = admin.firestore()

但是,我现在正在尝试收听存储上传。默认情况下,它正在监听我的生产应用程序。我需要听上传到我的开发项目。

由于存储侦听器来自functions,而不是admin(使用正确的配置进行了初始化(,因此出现了问题。

我怎么能"初始化";存储侦听器(下面(,以便它侦听dev项目?

exports.generateThumbnail = functions.storage
.object()
.onFinalize(async (object) => {})

有没有一种方法可以将侦听器连接到admin.storage()

我不确定,但您似乎在云功能中使用客户端SDK配置。Admin SDK使用服务帐户而不是客户端配置。

FIREBASE_CONFIG环境变量自动包含在通过FIREBASE CLI部署的FIREBASE函数的云函数中。

也就是说,您只需要初始化Admin SDK,如下所示:

import * as admin from 'firebase-admin';
admin.initializeApp()

谈到环境,我可以清楚地看到,针对不同的环境,有两个不同的项目。在这种情况下,您必须将功能分别部署到两个项目,因为为开发项目使用服务帐户的Admin SDK将只侦听开发项目中的更改

另一个选项是初始化Admin SDK两次,如文档中所述。

您也可以考虑对开发和生产使用相同的Firebase项目,但对它们使用不同的bucket。这样你就可以单独听这些桶了。要监听特定的bucket,请指定其名称:

const devFunction = functions.storage.bucket('dev-bucket').object().onFinalize(async (object) => {
//...
})
const prodFunction = functions.storage.bucket('prod-bucket').object().onFinalize(async (object) => {
//...
})

最新更新