成功登录后,我将返回的JWT令牌存储在Session中。 然后在搜索路径中,使用会话中的jwt令牌访问api,并在标头中设置如下:
router.post('/search', (req, res) => {
var getToken = req.session.APIToken;
var auth = 'Bearer '+getToken;
request.get({
headers: {
"authorization": auth
},
url: "localhost/abc/search?name=peter"
}, (error, response, body) => {
if(error) {
return console.dir(error);
}
var jsonBody = JSON.parse(body);
if(jsonBody.status === 200) {
console.log('Request successful!');
}
if(jsonBody.success === false) {
/// ??? BUT what if the JWT token is expired! How do I properly refresh or get a new valid jwt token here? ///
console.log('Token expired!');
}
});
});
但是,如果JWT令牌已过期怎么办!如何在此处正确刷新或获取新的有效jwt令牌?
我想使用回调函数来使用会话中保存的电子邮件和密码吗?但是我该怎么做呢?或者最好的方法是什么呢?
编辑:我有两个应用程序……一个前端应用程序……和一个独立的API应用程序。因此,登录时...我通过前端应用程序登录,但从API应用程序获取了JWT令牌。前端应用程序的登录会话为360s ... JWT令牌在60s内是有效的....因此,如果JWT令牌在用户发出搜索请求时过期...我想自动生成一个新令牌,完成请求。
答案 0 :(得分:0)
我认为您正在尝试使用JWT令牌实现auth0。最佳做法是在登录时始终返回2个令牌:
access_token(使用JWT):JWT的好处是服务器不需要查询数据库即可验证并获取有关正在调用API的用户的信息
refresh_token:这对用户在access_token过期时重新生成令牌很有用。
在客户端应用程序中,您应始终保存2个令牌。在调用任何API之前,您应该检查JWT是否过期。使用jwt.decode()
可以轻松完成。过期的信息通常存储在exp
或iat
键中。如果已过期,则需要在调用实际的API之前调用API以重新生成令牌。
您可以在此处找到示例:https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
希望这会有所帮助。