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

Deg*_*oah 9 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();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

根据Firebase文档,访问令牌在1小时后到期.为了处理我的应用程序中始终存在当前访问令牌的情况,我一直在寻找解决方案,我在firebase文档中发现我必须注册一个Firebase.IdTokenListener来监听

onIdTokenChanged事件

我的问题是:是吗?

onIdTokenChanged事件

如果访问令牌过期,会自动触发?

如果在访问令牌到期后事件未自动触发,那么"手动"查询新的/更新的Access令牌的coorect方法是什么?

"FirebaseAuth.getInstance().getCurrentUser().getIdToken(boolean)"
Run Code Online (Sandbox Code Playgroud)

方法?

我知道,如果我打电话给

mUser.getToken(真)

然后提到的事件被解雇了

IdTokenListener

被触发了.但这不是我正在寻找的.

boj*_*eil 10

onIdTokenChangedID令牌更改时随时触发.如果ID令牌过期,它将不会触发.如果刷新新的ID令牌,新用户登录或现有用户签名,它将触发.

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

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

BTW,getToken()已被弃用.你应该使用getIdToken.

  • 这是否意味着必须定期调用 **getIdToken()** 以隐式“检查”令牌是否已更改?我假设底层 Firebase SDK 在到期后触发 **onIdTokenChanged** 事件,这样我就可以调用我的 **onIdTokenChanged** 事件侦听器 **getIdToken()**。这对我来说意味着,我必须在每个后端 API 请求 **getIdToken()** 之前调用 **getIdToken()** 以确保拥有最新的 id 令牌。好像有点开销。。。 (4认同)
  • 您不需要定期调用,只需在向服务器发出请求时调用即可。它将确保您每次都获得一个新的 ID 令牌。 (2认同)