我们有一个 Google 计算引擎,用于执行 Nodejs 脚本,其中一个脚本连接到 Firebase 实时数据库。当此脚本尝试连接到 RTD 时,它会失败并显示以下内容:
@firebase/database:FIREBASE 警告:提供身份验证 名为“[DEFAULT]”的应用程序的凭据无效。这通常 表明您的应用程序未正确初始化。确保 提供给initializeApp()的“credential”属性被授权 访问指定的“databaseURL”并且来自正确的项目。
该脚本连接到同一项目下的实例。
databaseURL
通过 FIREBASE_CONFIG
环境变量分配,默认应用程序凭据用于通过各种 GCP 服务进行身份验证。
注释
databaseURL
是正确的,并且在执行时没有问题的 App Engine 实例中使用。databaseURL
作为 admin.initializeApp()
配置的一部分传递,但没有成功。过去几周我遇到了这个问题,只能通过添加一些范围来解决它:
gcloud compute instances set-service-account [INSTANCE_NAME] \
--service-account "your.gserviceaccount.com" \
--scopes "https://www.googleapis.com/auth/firebase.database,https://www.googleapis.com/auth/userinfo.email"
这记录在设置实时数据库和身份验证的范围中,尽管我也在那里忽略了它,只有在有人向我指出时才发现它。
可能对某些人来说仍然很方便:
确保在 Google 控制台 -> IAM 中将以下两个角色添加到 App Engine 默认服务帐户 (
此外,在初始化应用程序时也无需显式传递凭据。这会起作用:
const {initializeApp} = require("firebase-admin/app");
if (!admin.apps.length) {
admin.initializeApp();
}