16

将新的 Firebase Cloud Functions 与 admin sdk 结合使用。

我想使用 admin.auth().createCustomToken() 函数。调用此函数会导致错误消息

Error: createCustomToken() requires a certificate with "private_key" set.
    at FirebaseAuthError.Error (native)
    at FirebaseAuthError.FirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:25:28)
    at new FirebaseAuthError (/user_code/node_modules/firebase-admin/lib/utils/error.js:90:23)
    at FirebaseTokenGenerator.createCustomToken (/user_code/node_modules/firebase-admin/lib/auth/token-generator.js:62:19)
    at Auth.createCustomToken (/user_code/node_modules/firebase-admin/lib/auth/auth.js:89:37)
    at /user_code/index.js:29:26
    at process._tickDomainCallback (internal/process/next_tick.js:129:7)

如何配置云功能以使用 private_key?

admin.initializeApp(functions.config().firebase);
4

2 回答 2

40

不幸的是,该createCustomToken()方法需要一个私钥来铸造自定义令牌,而默认凭证当前不可用(恰好是应用程序默认凭证)。如使用 Firebase Admin SDK 创建自定义令牌中所述,您需要提供证书凭证才能创建自定义令牌。

您可以按照将 Firebase 添加到您的应用中的说明生成此凭据所需的证书。获得密钥 JSON 文件后,您需要将其放入 Cloud Functions for Firebase。

您可以通过将密钥 JSON 文件/functionsservice-account.json. 然后,在定义函数的文件中,admin.credential.cert()用于初始化 Admin SDK,如下所示:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

var serviceAccount = require("./service-account.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: functions.config().firebase.databaseURL
});

有关如何执行此操作的完整示例,以及更详细的说明和代码示例,请查看Instagram 登录示例

请注意,我们希望createCustomToken()将来添加对默认凭据的支持,但现在,您必须携带自己的凭据才能使此特定方法起作用。

于 2017-03-10T17:23:41.720 回答
0

如此处所述:https ://firebase.google.com/docs/auth/admin/create-custom-tokens?authuser=0

要在本地测试相同的代码,请下载服务帐户 JSON 文件并将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为指向它。

然后在您的代码中:

admin.initializeApp();

于 2018-10-27T14:51:57.127 回答