簡體   English   中英

如何在nodejs中創建沒有服務帳戶json的Firebase身份驗證自定義令牌?

[英]How to create Firebase Authentication custom token without service account json in nodejs?

我想在不使用服務帳戶 json 的情況下創建自定義令牌。 嘗試了以下配置項: https<\/a> :\/\/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<\/a>

並使用以下代碼生成令牌

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

簡短回答:您不能,sdk 密鑰是對您的應用進行身份驗證和授權以授予權限的唯一方法。

長(沒那么長)答案:使用一個雲函數,如果它在你的項目中,它會為你初始化它,所以你不必使用密鑰來實例化sdk

如果您的代碼未在 GCP 的托管運行時中運行,則您必須提供服務帳號 JSON 文件或至少提供serviceAccountId應用選項。

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

您應該首先通過將您的服務帳戶密鑰(從 Firebase 下載)傳遞給憑據來初始化 admin。 在調用 admin.auth() 之前使用此代碼。

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

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

2022答案

在最新的firebase-admin版本中,簡單地提供serviceAccountId是行不通的。 您還需要指定projectId

admin.initializeApp({
  projectId: process.env.PROJECT_ID,
  serviceAccountId: process.env.SERVICE_ACCOUNT_ID,
})

如果不這樣做,您將收到以下錯誤:

  errorInfo: {
    code: 'app/invalid-credential',
    message: 'Failed to determine project ID: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND'
  },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM