Firebase身份IDToken

时间:2019-05-13 19:39:30

标签: firebase firebase-authentication firebase-admin

我已经阅读了很多关于Web上的Firebase auth的文章,但是找不到关于应该如何在客户端使用idToken的任何明确解释。这是我到目前为止所知道的

用户登录后,我们可以使用以下方法获取令牌,如果令牌已过期,它将自动刷新令牌

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});

然后我们可以将此令牌发送到后端,在这里我们可以使用firebase admin SDK验证ID令牌并获取用户uid。

admin.auth().verifyIdToken(idToken).then(function(decodedToken) {
    var uid = decodedToken.uid;
    // ...
}).catch(function(error) {
    // Handle error
});

这是我不理解的东西。

  1. 在每次对服务器进行API调用以获取idToken之前,是否需要调用getIdToken()方法?
  2. Firebase文档说令牌在1小时后过期。那么我是否应该使用localStorage来跟踪它,然后将令牌重用1小时直到它到期,然后使用getIdToken()发布一个新令牌?
  3. 我是否应该使用不会过期的uid在后端创建会话,然后使用该会话来验证用户是否已登录?

1 个答案:

答案 0 :(得分:1)

  1. 否;如您所述,令牌有效期为一个小时。除非有理由刷新(例如,如果您添加custom claims),否则您可以在此期间重用同一令牌。

  2. 理想情况下,当令牌无效时,服务器将返回401 Unauthorized或其他内容。大多数REST库都提供了在请求链中添加拦截器的功能,因此您可以检查是否返回了401代码,并且仅在必要时刷新令牌。

  3. 除非您的业务逻辑需要,否则不需要后端会话。 Firebase库将为您处理持久性。