我正在我的项目中实施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
});
});
在此之后,我要验证结果中的令牌并将其发送到客户端。 一分钟后,我如何重新生成令牌? 请帮忙,让我知道路,并告诉我我做错了什么。谢谢!
答案 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,上面有代码。