部署在云端 运行 的 Firebase Admin SDK 是否需要 GOOGLE_CLOUD_PROJECT env var?

Does Firebase Admin SDK deployed at Cloud Run require GOOGLE_CLOUD_PROJECT env var?

我们已将服务部署到云端 运行,它使用 Firebase Admin SDK。此服务使用多种与身份验证相关的方法。我们发现如果我们不包含 GOOGLE_CLOUD_PROJECT env var,方法 setCustomUserClaims(...) 会抛出以下错误:Failed to determine project ID for Auth. Initialize the SDK with service account credentials or set project ID as an app option. Alternatively set the GOOGLE_CLOUD_PROJECT environment variable.

但是,我们还检查了如果环境变量不存在,其他方法(例如 createCustomToken(...))也可以正常工作。这怎么可能?我们应该使用 GOOGLE_CLOUD_PROJECT 还是不使用?

createCustomToken 在 SDK 中铸造并签署其身份验证令牌。

这与 setCustomUserClaims 形成对比,后者必须进行网络调用才能完成其工作,主要是到端点:

https://identitytoolkit.googleapis.com/{version}/projects/{projectId}/accounts:update

由于此端点使用项目 ID,因此需要从某处提供。

截至撰写本文时,它按以下顺序在 these locations 中查找:

  1. options.projectId from initializeApp()(这通常由process.env.FIREBASE_CONFIG填写)
  2. options.credential.projectId 来自 initializeApp(),如果凭证是 ServiceAccountCredential
  3. process.env.GOOGLE_CLOUD_PROJECT
  4. process.env.GCLOUD_PROJECT
  5. options.credential.getProjectId() 来自 initializeApp(),如果凭证是 ComputeEngineCredential