以下版本的 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
类型,则无需进行任何更改。