在Node request.headers中设置授权

我试图发送一个Passport-Locallogin请求到客户端,由Satellizer进行分析,我希望从服务器端发送一个授权令牌。 不幸的是,在request.headers没有密钥authorization

 { host: 'localhost:3000', connection: 'keep-alive', 'cache-control': 'max-age=0', accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' } 

loginfunction在这里redirect,这是调用ensureAuthenticated()地方。

 app.get('/main', ensureAuthenticated, function(req, res, next){ res.render('main.ejs', { token: createSendToken(req.user, config.secret), id: req.user._id, username: req.user.username, authorization: req.user.authorization }); }); 

ensureAuthenticated()然后分析login请求,并确保令牌匹配:

 function ensureAuthenticated(req, res, next) { if (!req.headers.authorization) { return res.status(401).send({ message: 'Please make sure your request has an Authorization header' }); } var token = req.headers.authorization.split(' ')[1]; var payload = null; try { payload = jwt.decode(token, config.token_secret); } catch (err) { return res.status(401).send({ message: err.message }); } if (payload.exp <= moment().unix()) { return res.status(401).send({ message: 'Token has expired' }); } req.user = payload.sub; next(); } 

然后redirect并显示消息

 { message: 'Please make sure your request has an Authorization header' } 

我将如何设置一个授权密钥request.headers?

要在请求中设置一个新的头字段,只需直接访问它,因为头对象看起来像一个正常的哈希表。

 request.headers.authorization = value; 

所以这个解决scheme很简单,虽然工作很简单:我需要创build自己的自定义护照login函数,在ensureAuthenticated()函数之前发送一个令牌。

旧的loginfunction:

 app.post('/auth/login', passport.authenticate('local-login', { successRedirect: '/main', failureRedirect: '/login', message: null, failureFlash: true })); 

新的自定义loginfunction:

 app.post('/auth/login', function(req, res, next){ passport.authenticate('local-login', function(err, user, info){ if (err) { return next(err); } if (!user) { return res.redirect('/login'); } req.login(user, function(err){ var token = createSendToken(user, config.secret); if (err) { return next(err); } if (token == (null || undefined)) { return next(err); } res.status(200).send({ token: token }); }); })(req, res, next); }); 

一旦它被redirect到/main那么将ensureAuthenticated()函数,并且所有东西都按照它应该的那样工作。