Admin SDK 身份验证迁移指南

以下版本的 Admin SDK 中引入了一些身份验证支持方面会影响兼容性的变化:

  • Java SDK 5.0.0
  • Node SDK 5.0.0
  • Python SDK 2.0.0

请按照本指南中的说明将现有的身份验证代码迁移到新版本中。

Admin Java SDK (5.0.0)

FirebaseOptions.Builder 中使用 setCredential()

移除了弃用的 FirebaseOptions.Builder.setServiceAccount() 方法。如果您的应用使用了此方法,请进行更新,改用 setCredential() 方法。

旧版

FirebaseOptions options = new FirebaseOptions.Builder()
    .setServiceAccount(getCredentialAsStream())
    .build();

新版

FirebaseOptions options = new FirebaseOptions.Builder()
    .setCredential(FirebaseCredentials.fromCertificate(getCredentialAsStream()))
    .build();

另请注意,现在,在创建 FirebaseOptions 实例时必须调用 Builder.setCredential()。在未指定凭据的情况下调用 Builder.build() 会导致运行时异常。

处理 FirebaseCredentials 中的工厂方法引发的错误

FirebaseCredentials 类中的以下工厂方法现在可能会引发 IOException:

  • fromCertificate()
  • fromRefreshToken()

请修改您的代码以对其进行处理。

升级前

FirebaseCredential credential = FirebaseCredentials.fromCertificate(stream);

新版

try {
    FirebaseCredential credential = FirebaseCredentials.fromCertificate(stream);
} catch (IOException e) {
    // handle error
    log.error("Failed to load Firebase credential", e);
}

更新 FirebaseCredential 的自定义实现

FirebaseCredential 接口已进行了如下更改:

升级前

Task<String> getAccessToken(boolean forceRefresh);

新版

Task<GoogleOAuthAccessToken> getAccessToken();

GoogleOAuthAccessToken 是一种新的 public 类型,它封装了对象中返回的访问令牌 (String) 及其过期时间 (long)。如果用户提供了此接口的自定义实现,那么现在应实现这一新的方法。

Admin Node SDK (5.0.0)

admin.app.AppOptions 中使用 credential 属性

移除了弃用的 serviceAccount 属性。如果您的应用使用了此属性,请进行更新,改用 credential 属性。

旧版

admin.initializeApp({
    serviceAccount: 'path/to/key.json'
});

新版

var key = require("path/to/serviceAccountKey.json");
admin.initializeApp({
    credential: admin.credential.cert(key)
});

请注意:现在,在初始化应用时必须设置 credential 属性。在未指定凭据的情况下调用 initializeApp 会导致异常。

更新对 admin.auth.UserMetadata 的引用

UserMetadata 类中的属性已进行了如下更改:

  • createdAt 现为 creationTime
  • lastSignedInAt 现为 lastSignInTime

旧版

admin.auth().getUser(uid)
  .then(function(userRecord) {
    var createdAt = userRecord.metadata.createdAt; // Date
    var lastSignedInAt = userRecord.metadata.lastSignedInAt // Date
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

升级后

admin.auth().getUser(uid)
  .then(function(userRecord) {
    var createdAt = userRecord.metadata.creationTime; // UTC string
    var lastSignedInAt = userRecord.metadata.lastSignInTime // UTC string
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

Admin Python SDK (2.0.0)

依赖项 oauth2client 被替换为 google-auth

Firebase Admin Python SDK 已不再依赖于 oauth2client 库。该 SDK 现在改用新的 google-auth 库。

verify_id_token() 会引发 ValueErrors

如果您的代码中明确处理由 verify_id_token() 函数引发的特定异常类型,请更新您的代码,如下所示。

旧版

try:
  claims = auth.verify_id_token(token)
except oauth2client.crypt.AppIdentityError:
  handle_error()

新版

try:
  claims = auth.verify_id_token(token)
except ValueError:
  handle_error()

如果您的代码不捕获任何异常,或者只捕获 Python 的基本 Exception 类型,则无需进行任何更改。