Node.js表达,请求jwt令牌-如果请求中过期的话如何正确获取新的有效令牌

时间:2018-08-12 16:00:15

标签: node.js express jwt node-request

成功登录后,我将返回的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令牌在用户发出搜索请求时过期...我想自动生成一个新令牌,完成请求。

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试使用JWT令牌实现auth0。最佳做法是在登录时始终返回2个令牌:

  • access_token(使用JWT):JWT的好处是服务器不需要查询数据库即可验证并获取有关正在调用API的用户的信息

  • refresh_token:这对用户在access_token过期时重新生成令牌很有用。

在客户端应用程序中,您应始终保存2个令牌。在调用任何API之前,您应该检查JWT是否过期。使用jwt.decode()可以轻松完成。过期的信息通常存储在expiat键中。如果已过期,则需要在调用实际的API之前调用API以重新生成令牌。

您可以在此处找到示例:https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/

希望这会有所帮助。