2016-07-06 141 views
2

我想补充一个刷新令牌添加到中间件头作为这个问题的第一个答案看到:implementing refresh-tokens with angular and express-jwt中间件的NodeJS设置页眉

后端 - 中间件:

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(); 
      } 
     } 
    }); 

正投end拦截器:

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时,设置标题'Authorization'在'_headers'而不是'headers'中。

我该如何解决这个问题。

回答

0

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

+0

我试过set,header和setHeader以各种组合,但是这些都没有解决我的问题。 – pmulders