将新的Firebase云功能与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);
答案 0 :(得分:36)
不幸的是,createCustomToken()
方法需要一个私钥来编写自定义令牌,目前暂不具备默认凭据(恰好是Application Default Credential)。如Create custom tokens using the Firebase Admin SDKs中所述,您需要提供证书凭据才能创建自定义令牌。
您可以按照Add Firebase to your app中的说明生成此凭据所需的证书。获得密钥JSON文件后,您需要将其加入Cloud Functions for Firebase。
您可以将密钥JSON文件存储在/functions
文件夹中service-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 sign in sample。
请注意,我们希望将来可以从默认凭据中添加对createCustomToken()
的支持,但是现在,您必须为此特定方法提供自己的凭据才能正常工作。
答案 1 :(得分:0)
如此处所述:https://firebase.google.com/docs/auth/admin/create-custom-tokens?authuser=0
要在本地测试相同的代码,请下载服务帐户JSON文件,并将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为指向它。
然后在您的代码中:
admin.initializeApp();