处理ID令牌到期?

时间:2019-02-15 00:07:35

标签: node.js firebase web

在我的项目中,当用户登录时,将触发auth更改并调用getIdToken,然后该令牌由HTTP帖子发送到后端服务器,在该服务器上对其进行验证,然后将其用作cookie。 然后,每次用户请求一个私人页面来验证其身份和访问权限时,都将重新验证并使用此Cookie。

直到id令牌过期,此操作一直有效。在这一点上,它失败了,我找不到将新生成的令牌用作cookie的方法。

1 个答案:

答案 0 :(得分:0)

它现在如下工作。

后端身份验证检查:

def cities(request, pk):
    country = Post.objects.get(id=pk).country  # you could also do get_object_or_404
    cities = Post.objects.filter(country=country).values('city')
    # you could also add .distinct('city') to de-duplicate cities
    return render(request, 'users/cities.html', {"cities": cities})

refreshToken呈现给客户端:

function checkAuth(req, res, next) {
  if(!req.session.token)
  {
    return res.redirect("login");
  }
  else{
    admin.auth().verifyIdToken(req.session.token).then(function(decodedToken) {
      req.session.uid = decodedToken.uid
      next();
    }).catch(function(error) { // expired token
      return res.render("refreshToken");
    });
  }
}

返回后端:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    firebase.auth().currentUser.getIdToken(true).then(function(idToken) {
        fetch("/refreshToken",{method: "POST",body:"newToken="+idToken, headers:{'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}).then(function(response){
          if(response.ok){
              location.reload(true)
          }
        })
        .then(function(data){
          if(data.suc == 0){
            window.location.replace("/login");
          }
        });
    }).catch(function(error) {
    });
  }
  else{
    window.location.replace("/login");
  }