角拦截器读取响应标头

时间:2019-02-04 11:54:41

标签: angular jwt angular-http-interceptors

我的角度应用程序上有一个拦截器,请求完成后我需要查看响应头,目前,我正在这样做

return next.handle(copy).do((event: any) => {
        if (event && event.headers && event.headers.get('x-token')) {
            console.log('\ndelaying', event.headers.get('x-token'));
            const authService = this.authService;
            setTimeout(function () {
                console.log('\ndelayed', event.headers.get('x-token'));
                const token = event.headers.get('x-token');
                authService.setJWT(token);
            }, 1000 * 3); // delay

        }

    }, error => {
        if (error && error.status === 401) {
            this.authService.logout();
            this.router.navigateByUrl('/login');
        }
    });
}

收到响应后,我正在检查标题。如果X令牌是从服务器发送的,我将用我收到的新令牌替换它来更新我应用的JWT

现在这是我的REST API服务器上拥有的中间件

module.exports = {
refreshToken: (req, res, next) => {
    let reQtoken = req.get('authorization') ? req.get('authorization') : req.query.token;
    verifyJWT(reQtoken)
        .then((decodedToken) => {
            //var current_time = new Date().getTime() / 1000;
            const tokenDate = moment.unix(decodedToken.iat);
            const diff = moment().diff(tokenDate, 'minutes');
            console.log('\n',reQtoken);
            console.log(tokenDate,diff, moment());
            if (diff > 3) {
                console.log('here');
                const token = createJWTToken({
                    username: decodedToken.username,
                    person_id: decodedToken.person_id
                });
                res.set({
                    'x-token': token,
                    'Access-Control-Expose-Headers': 'x-token'
                });
            }
            next()
        })
        .catch((err) => {
            res.status(status.UNAUTHORIZED)
                .json({
                    message: "Invalid auth token provided.",
                    err: err
                })
        });
}
};

我可能正在做一些愚蠢的事情,但我无法弄清楚。请从下面的角度应用查看日志

enter image description here

即使我的服务器没有发送响应,它也始终有一个JWT,因为它仅在创建的JWT与当前时间之间的时间差超过3分钟时才发送,因此它可能正在缓存中,或者我正在接收它一种错误的方式,因为在日志中有时是我在几个小时前创建的JWT,请提出解决方案

0 个答案:

没有答案