Firebase访问令牌是否自动刷新?
问题内容:
我正在使用Firebase电子邮件/密码身份验证。用户成功登录后,我将通过以下方式查询访问令牌:
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
String idToken = task.getResult().getToken();
// Send token to your backend via HTTPS
// ...
} else {
// Handle error -> task.getException();
}
}
});
根据Firebase文档,访问令牌会在1小时后过期。为了处理在我的应用程序中始终具有当前访问令牌的情况,我在寻找解决方案,并且在firebase文档中发现我必须注册Firebase.IdTokenListener来侦听
onIdTokenChanged事件
我的问题是 :
onIdTokenChanged事件
访问令牌过期后会自动触发?
如果访问令牌过期后未自动触发该事件,那么采用哪种方法的正确方法是“手动”查询具有
"FirebaseAuth.getInstance().getCurrentUser().getIdToken(boolean)"
方法?
我知道,如果我打电话给
mUser.getToken(true)
然后触发上述事件,
IdTokenListener
被触发。但这不是我想要的。
问题答案:
onIdTokenChanged
每当ID令牌更改时都会触发。如果ID令牌过期,则不会触发。如果刷新了新的ID令牌,新用户登录或现有用户退出,则会触发。
Firebase会根据需要自动刷新。例如,如果您使用实时数据库或Firestore,它们将在令牌过期后自动刷新令牌,因为它们需要持久连接和ID令牌。这将导致该侦听器触发。
getIdToken()
将缓存未过期的令牌,如果您调用它并且检测到过期,它将自动刷新ID令牌,这将触发该侦听器。
BTW,getToken()
已弃用。您应该getIdToken
改用。