【问题标题】:Handling id token expiration?处理 id 令牌过期?
【发布时间】:2023-03-20 13:12:01
【问题描述】:

在我的项目中,当用户登录时,会触发身份验证更改并调用 getIdToken,然后通过 HTTP 帖子将令牌发送到后端服务器,在那里它得到验证,然后用作 cookie。 然后,每次用户请求私人页面以验证他的身份和访问权限时,都会重新验证并使用此 cookie。

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

【问题讨论】:

  • 你不能删除旧的cookie并给一个新的吗?您首先使用什么服务器端框架来设置 cookie?
  • 我正在使用 express.js,主要问题是将新的发送到服务器,因为我找不到监听新令牌生成事件的方法

标签: node.js firebase web


【解决方案1】:

它现在工作如下..

后端认证检查:

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");
    });
  }
}

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");
  }

返回后台:

app.post("/refreshToken", function(req, res){
  if(!req.session.uid) return res.send({suc:0});
  admin.auth().verifyIdToken(req.body.newToken || "").then(function(decodedToken) {
    if(req.session.uid == decodedToken.uid){
      req.session.token = req.body.newToken;
      return res.send({suc:1});
    }
  })
  .catch(function(error) {
      res.send({suc:0});
  });
});

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 2019-03-21
    • 2021-08-03
    • 2021-09-06
    • 2021-10-19
    • 2015-10-05
    • 2019-12-11
    相关资源
    最近更新 更多