【问题标题】:How to create Firebase Authentication custom token without service account json in nodejs?如何在nodejs中创建没有服务帐户json的Firebase身份验证自定义令牌?
【发布时间】:2019-11-02 12:51:50
【问题描述】:

我想在不使用服务帐户 json 的情况下创建自定义令牌。 尝试了以下配置项: https://firebase.google.com/docs/auth/admin/create-custom-tokens#using_a_service_account_id

https://firebase.google.com/docs/auth/admin/create-custom-tokens#letting_the_admin_sdk_discover_a_service_account

并使用以下代码生成令牌

admin.auth().createCustomToken(uid)
  .then(function(customToken) {
    // Send token back to client
  })
  .catch(function(error) {
    console.log('Error creating custom token:', error);
  });

得到以下错误:

'无法确定服务帐户。确保使用服务帐户凭据初始化 SDK。或者,指定具有 iam.serviceAccounts.signBlob 权限的服务帐户。原始错误:错误:发出请求时出错:getaddrinfo ENOTFOUND 元数据元数据:80。错误代码:ENOTFOUND'

使用了最新的“firebase-admin”npm 模块。

请多多指教。

【问题讨论】:

  • 除非您的代码在 Google 托管环境(云函数等)中运行,否则您可以使用的唯一方法是服务帐户 JSON 文件。

标签: javascript node.js firebase firebase-authentication firebase-admin


【解决方案1】:

您应该首先通过将您的服务帐户密钥(从 Firebase 下载)传递给凭据来初始化管理员。在调用 admin.auth() 之前使用此代码。

var serviceAccount = require('./ServiceAccountKey.json')

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});

【讨论】:

  • 我的问题是没有服务帐户密钥
【解决方案2】:

如果您的代码未在 Google Cloud 的托管运行时中运行,您必须提供服务帐号 JSON 文件或至少提供 serviceAccountId 应用选项。

admin.initializeApp({
  serviceAccountId: 'my-client-id@my-project-id.iam.gserviceaccount.com',
});

【讨论】:

  • 使用什么 npm 模块和版本?
  • 这应该是公认的答案。通过在初始化过程中使用serviceAccountId,SDK 将模拟提供的服务帐户。确保运行应用程序的用户确实有权使用和创建所提到的服务帐户的令牌。
【解决方案3】:

简短回答:您不能,SDK 密钥是对您的应用进行身份验证和授权以授予权限的唯一方法。

长(没那么长)回答:使用一个云函数,如果它进入你的项目,它会为你初始化它,所以你不必使用密钥来实例化sdk

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 2019-10-25
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多