jwt中过期时如何刷新令牌

时间:2018-09-06 13:15:21

标签: angularjs node.js jwt

我正在我的项目中实施JWT。我实现了jwt,并给了它1分钟的到期时间。从api端生成的jwt在登录期间,并且令牌和到期详细信息在结果中发送并存储在本地存储中。如何从API端刷新过期的令牌并将其再次发送回客户端,以便可以将其存储在本地存储中并使用拦截器针对每次调用发送?

这就是我创建jwt并赋予到期时间的方式

// let us suppose this is my input
tokenObject = { User: { username: name, pwd: pwd } };
//creating a jwt here
jwt.sign({ tokenObject }, "secretkey", { expiresIn: "60s" }, (err, token) => {
  res.json({
    token
  });
});

在此之后,我要验证结果中的令牌并将其发送到客户端。 一分钟后,我如何重新生成令牌? 请帮忙,让我知道路,并告诉我我做错了什么。谢谢!

2 个答案:

答案 0 :(得分:2)

您需要添加一个功能或中间件,以检查JWT是否有效。您可以使用verify库的JWT方法:

jwt.verify(token, 'secretKey', function (err, decoded) {
  if (err) {
    if (err.name === 'TokenExpiredError') {
       //create a new token and send the same way you created initially
    }
  }
});

答案 1 :(得分:0)

您可以创建一个接受JWT令牌的API,对其进行验证,然后为同一用户颁发新令牌。

看看jsonwebtoken的{​​{3}}方法。 在验证令牌时,您也可以使用ignoreExpiration: true选项来验证过期的令牌。然后使用sign方法生成新的。
因此,在从前端发出请求时,如果遇到令牌过期错误,则可以使用该API发行新令牌并保存该令牌。

话虽如此,我建议您看一下有关从verify刷新JWT令牌的说明:

  

首先,我们建议您仔细考虑是否自动刷新JWT   不会在您的系统中引入任何漏洞。

     

我们不愿意将此内容纳入图书馆,但是,   您可以看一下这个例子来说明   完成。除了那个例子,还有一个问题和一个拉   要求获得有关此主题的更多知识。

这里是要旨的docs,上面有代码。