如何检测idToken到期?

时间:2019-08-01 15:28:19

标签: javascript firebase firebase-authentication

我有一个登录页面,该页面使用以下方法验证用户身份 signInWithEmailAndPassword()使用Javascript客户端SDK。

如果登录成功,则将用户(连同idToken)重定向到成员页面。

在服务器端(使用firebase admin SDK的nodejs),成员页面检查idToken的有效性,如果有效,则从Firebase获取用户特定的数据并将其显示在网页上。在会员页面上,有很多数据可供查看/编辑/删除等。因此,用户在此页面上花费的时间可能超过一个小时,这并非不可想象。

我的问题是,我找不到检测idToken是否已过期的方法。理想情况下,我想刷新并获取一个新的idToken。那可能吗?如果那不可能,我想在idToken过期时将用户重定向到登录页面。

但是我无法弄清楚如何实现两者之一。当idToken过期时,似乎没有触发onAuthStateChangedonIdTokenChanged。而且我无法执行firebase.auth().currentUser.getIdToken(true)这样的idToken的forceRefresh。因为在成员页面上,firebase.auth().currentUser返回null。

关于如何处理这种情况的任何建议?

谢谢。

1 个答案:

答案 0 :(得分:1)

使用Firebase Node.js Admin SDK,可以通过将verifyIdToken()参数设置为checkRevoked来调用true时检查吊销ID令牌是否已过期。

  

verifyIdToken(idToken: string, checkRevoked?: boolean): Promise<DecodedIdToken>

     

checkedRevoked 布尔值
  是否检查ID令牌是否被撤销。这需要向Firebase Auth后端提出额外的请求,以检查相应用户的tokensValidAfterTime时间。如果未指定,则不应用此附加检查。

admin.auth().verifyIdToken(idToken, true)
  .then(function(decodedToken) {
    let uid = decodedToken.uid;
    // ...
  }).catch(function(error) {
    // Handle error for expired ID token
  });

或者,可以在客户端上检查ID令牌有效载荷声明。有关如何Verify ID tokens using a third-party JWT library的文档显示了有效负载声明。

  

exp 到期时间:必须在将来。时间是自UNIX时代以来的秒数。

jwt.io引用支持客户端令牌验证的库。

另请参阅:How to decode the JWT encoded token payload on client-side in angular 5?