Firebase Admin INVALID_APP_OPTIONS initializeApp() 错误
Firebase Admin INVALID_APP_OPTIONS error at initializeApp()
我正在尝试通过 Node.js 后端将 Instagram OAuth 连接到 Firebase。我已成功检索到 Instagram 帐户数据,包括 access_token
,我想在我的 Node.js 后端与 firebase-admin
的 createCustomToken
进行交换。我的 objective 是为了生成自定义令牌,以便我的 Angular 应用程序可以对我的 Firebase 应用程序执行 signInWithCustomToken(token)
。从 Instagram 检索数据没有问题,因为我可以在控制台上打印我的 JSON 对象。
当我想将我的 access_token
兑换成 Firebase 自定义令牌时出现问题。
我在 Node.js 的 Firebase 管理页面上关注了 this guide,但我遇到了下面的错误消息
throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_APP_OPTIONS, "Invalid Firebase app options passed as the first argument to initializeApp() for the " +
Error: Invalid Firebase app options passed as the first argument to initializeApp() for the app named "[DEFAULT]". The "credential" property must be an object which implements the Credential interface.
这是我在相关问题上的代码。
// authService.js
var fbAdmin = require('firebase-admin');
var serviceAccount = require('./key/key.json');
function createFirebaseToken(instagramID) {
// I copy & pasted this var from other class
var config = {
apiKey: "MY_FIREBASE_APIKEY",
authDomain: "MY_APP.firebaseapp.com",
databaseURL: "https://MY_APP.firebaseio.com",
storageBucket: "MY_APP.appspot.com",
};
console.log(fbAdmin.credential.cert(serviceAccount)); // serviceAccount successfully printed on console
// Error appears when executing this function
fbAdmin.initializeApp({
serviceAccount: fbAdmin.credential.cert(serviceAccount),
databaseURL: config.databaseURL
});
const uid = `instagram:${instagramID}`;
// Create the custom token.
console.log(uid);
return fbAdmin.auth().createCustomToken(uid);
}
我的 Node 应用程序似乎无法初始化与 firebase-admin
的连接,但我不知道解决方案,因为我是这些技术的初学者。请指教
刚刚在 2017 年 5 月的 5.0.0 版本中偶然发现 Firebase Admin Release Notes,声明 serviceAccount
已被删除。因此,我没有强制使用 serviceAccount
,而是使用 credential
。
fbAdmin.initializeApp({
credential: fbAdmin.credential.cert({
projectId: '<APP_ID>',
clientEmail: "foo@<APP_ID>.iam.gserviceaccount.com",
privateKey: "-----BEGIN PRIVATE KEY-----\n<MY_PRIVATE_KEY>\n-----END PRIVATE KEY-----\n"
}),
databaseURL: config.databaseURL
});
Updated Answer
在继续使用它之后,它似乎能够调用 admin.initializeApp()
而无需任何参数,您需要确保您的 `/functions nodeJs 设置是最新。
在/functions
目录下,运行这个命令:
npm i --save firebase-functions@latest
感谢:
.. 我仍然熟悉所有 nodeJS/npm 细节 - 不知道为什么,但似乎我不得不 运行 几次才能让一切都到位。那和 sudo npm install -g firebase-tools
也更新了。
根据官方文档,我们至少需要使用 Firebase 4.12.0 版本才能获得最新的云功能支持:https://firebase.google.com/docs/functions/callable
First Answer
我 运行 在尝试为 Firebase 设置 Cloud Functions 时出现相同的错误消息。
传递 admin.initializeApp
的参数为我的项目解决了它:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
经过大量搜索,很高兴地找到了这个带有 post 的线程,其中包含那行代码:https://github.com/firebase/firebase-functions/issues/99 .. 因为到目前为止还没有在文档中的任何地方看到它关于那个参数
根据 2018 年 1 月 11 日的发布文档:
https://firebase.google.com/support/release-notes/admin/node
The admin.initializeApp() method can now be invoked without any arguments. This initializes an app using Google Application Default Credentials, and other AppOptions loaded from the FIREBASE_CONFIG environment variable.
可以通过将 firebase-tools、firebase-functions 和 firebase-admin 包更新到最新版本来解决此问题。
npm install -g firebase-tools@latest
npm install firebase-functions@latest
npm install firebase-admin@latest
有关详细信息,请参阅此 GitHub page。
请使用以下代码段,它在 Node.js 的 Firebase Admin SDK 中提到。从项目设置中的服务帐户下载 JSON 文件并更改 serviceAccount
中的路径。同时添加您的 databaseUrl
,其格式为 http://app_name/.firebaseio.com
var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "yourDatabaseUrl"
});
检查您使用的是哪个版本的 firebase-admin 模块。
根据版本 5.9.1 的发行说明
The admin.initializeApp() method can now be invoked without a credential option. The SDK uses Google Application Default Credentials when initialized this way.
我正在尝试通过 Node.js 后端将 Instagram OAuth 连接到 Firebase。我已成功检索到 Instagram 帐户数据,包括 access_token
,我想在我的 Node.js 后端与 firebase-admin
的 createCustomToken
进行交换。我的 objective 是为了生成自定义令牌,以便我的 Angular 应用程序可以对我的 Firebase 应用程序执行 signInWithCustomToken(token)
。从 Instagram 检索数据没有问题,因为我可以在控制台上打印我的 JSON 对象。
当我想将我的 access_token
兑换成 Firebase 自定义令牌时出现问题。
我在 Node.js 的 Firebase 管理页面上关注了 this guide,但我遇到了下面的错误消息
throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_APP_OPTIONS, "Invalid Firebase app options passed as the first argument to initializeApp() for the " +
Error: Invalid Firebase app options passed as the first argument to initializeApp() for the app named "[DEFAULT]". The "credential" property must be an object which implements the Credential interface.
这是我在相关问题上的代码。
// authService.js
var fbAdmin = require('firebase-admin');
var serviceAccount = require('./key/key.json');
function createFirebaseToken(instagramID) {
// I copy & pasted this var from other class
var config = {
apiKey: "MY_FIREBASE_APIKEY",
authDomain: "MY_APP.firebaseapp.com",
databaseURL: "https://MY_APP.firebaseio.com",
storageBucket: "MY_APP.appspot.com",
};
console.log(fbAdmin.credential.cert(serviceAccount)); // serviceAccount successfully printed on console
// Error appears when executing this function
fbAdmin.initializeApp({
serviceAccount: fbAdmin.credential.cert(serviceAccount),
databaseURL: config.databaseURL
});
const uid = `instagram:${instagramID}`;
// Create the custom token.
console.log(uid);
return fbAdmin.auth().createCustomToken(uid);
}
我的 Node 应用程序似乎无法初始化与 firebase-admin
的连接,但我不知道解决方案,因为我是这些技术的初学者。请指教
刚刚在 2017 年 5 月的 5.0.0 版本中偶然发现 Firebase Admin Release Notes,声明 serviceAccount
已被删除。因此,我没有强制使用 serviceAccount
,而是使用 credential
。
fbAdmin.initializeApp({
credential: fbAdmin.credential.cert({
projectId: '<APP_ID>',
clientEmail: "foo@<APP_ID>.iam.gserviceaccount.com",
privateKey: "-----BEGIN PRIVATE KEY-----\n<MY_PRIVATE_KEY>\n-----END PRIVATE KEY-----\n"
}),
databaseURL: config.databaseURL
});
Updated Answer
在继续使用它之后,它似乎能够调用 admin.initializeApp()
而无需任何参数,您需要确保您的 `/functions nodeJs 设置是最新。
在/functions
目录下,运行这个命令:
npm i --save firebase-functions@latest
感谢:
.. 我仍然熟悉所有 nodeJS/npm 细节 - 不知道为什么,但似乎我不得不 运行 几次才能让一切都到位。那和 sudo npm install -g firebase-tools
也更新了。
根据官方文档,我们至少需要使用 Firebase 4.12.0 版本才能获得最新的云功能支持:https://firebase.google.com/docs/functions/callable
First Answer
我 运行 在尝试为 Firebase 设置 Cloud Functions 时出现相同的错误消息。
传递 admin.initializeApp
的参数为我的项目解决了它:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
经过大量搜索,很高兴地找到了这个带有 post 的线程,其中包含那行代码:https://github.com/firebase/firebase-functions/issues/99 .. 因为到目前为止还没有在文档中的任何地方看到它关于那个参数
根据 2018 年 1 月 11 日的发布文档:
https://firebase.google.com/support/release-notes/admin/node
The admin.initializeApp() method can now be invoked without any arguments. This initializes an app using Google Application Default Credentials, and other AppOptions loaded from the FIREBASE_CONFIG environment variable.
可以通过将 firebase-tools、firebase-functions 和 firebase-admin 包更新到最新版本来解决此问题。
npm install -g firebase-tools@latest
npm install firebase-functions@latest
npm install firebase-admin@latest
有关详细信息,请参阅此 GitHub page。
请使用以下代码段,它在 Node.js 的 Firebase Admin SDK 中提到。从项目设置中的服务帐户下载 JSON 文件并更改 serviceAccount
中的路径。同时添加您的 databaseUrl
,其格式为 http://app_name/.firebaseio.com
var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "yourDatabaseUrl"
});
检查您使用的是哪个版本的 firebase-admin 模块。
根据版本 5.9.1 的发行说明
The admin.initializeApp() method can now be invoked without a credential option. The SDK uses Google Application Default Credentials when initialized this way.