firebase访问令牌是否自动刷新?

时间:2018-04-04 16:56:42

标签: java android firebase firebase-authentication

我正在使用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文档中找到了to register a Firebase.IdTokenListener来收听

  

onIdTokenChanged事件

我的问题是:是

  

onIdTokenChanged事件

如果访问令牌过期,

会自动触发吗?

如果在访问令牌过期后事件未自动触发,那么使用

“手动”查询新的/更新的Access令牌的coorect方法是什么?
"FirebaseAuth.getInstance().getCurrentUser().getIdToken(boolean)"

方法

我知道,如果我打电话给

  

mUser.getToken(真)

然后触发了上述事件和

  

IdTokenListener

被触发。但这不是我在想的。

1 个答案:

答案 0 :(得分:6)

只要ID令牌发生变化,就会触发

onIdTokenChanged。如果ID令牌过期,它将不会触发。如果刷新新的ID令牌,新用户登录或现有用户签名,则会触发。

如果需要,Firebase会自动刷新。例如,如果您使用的是实时数据库或Firestore,它们将在到期后自动刷新令牌,因为它们需要持久连接和ID令牌。这将导致该侦听器触发。

getIdToken()将缓存未到期的令牌,如果您调用它并且它检测到到期,它将自动刷新将触发该侦听器的ID令牌。

BTW,getToken()已被弃用。您应该使用getIdToken代替。