3

我想添加一个刷新令牌到中间件的标题中,如这个问题的第一个答案所示:用 angular 和 express-jwt 实现刷新令牌

后端 - 中间件:

jwt.verify(token, config.secret, function(err, decoded) {
        if (err) {
            res.status(401);
            return res.json({ success: false, message: 'Authentication failed' });
        } else {
            var token_exp = new Date(decoded.exp * 1000);
            var date = new Date();
            var difference = (token_exp.getTime() - date.getTime()) / 60000;

            if(difference < (config.expireTimeToken / 2 )){
                var expires = config.expireTimeToken + 'm';
                var token = jwt.refreshToken(decoded);

                res.setHeader('Authorization', 'Bearer ' + token);
                next();
            }else{
                req.decoded = decoded;
                next();
            }
        }
    });

前端拦截器:

module.exports = function ($injector) {
    return {
        request: function (config) {

            var CoreService = $injector.get('CoreService');

            config.headers['x-access-token'] = CoreService.getToken();
            return config;
        }, 
        response: function(response) {
            var receivedToken = response.headers('authorization');
            console.log(receivedToken);
            return response;
        }
    };
};

但是,每当我设置标头时,客户端的拦截器都不会收到它。当我在我的 npm 控制台中调试 res.header 时,设置的标头“授权”位于“_headers”而不是“标头”中。

我该如何解决这个问题。

4

1 回答 1

0

在 express 中间件中,您可以使用res.set(field, [value])or设置标头res.header(field, [value])(相同功能的别名)。setHeader 不是 express 方法,而是本机 node.js,我认为这可能会导致问题。

于 2016-07-06T11:59:44.403 回答