在passportjs响应之前的Expressjs / Change header

我正在尝试更改Nodejs中的WWW-Authenticate头中发送的头挑战。

使用passportjs,我目前的服务器代码如下:

router.route('/login/') .get(function(req, res){ if(req.isAuthenticated()) res.redirect('/admin/'); else res.render('admin/partials/login.html'); }) .post(passport.authenticate('digest')); 

我面临的问题是,摘要授权首先发送一个401代码响应(这是正常的方式),但大多数浏览器(webkit至less),启动一个提示popin要求用户进行身份validation,当他们发现这样的挑战(摘要或基本)在标题。

我读了一个解决scheme可以是更改标题,修改WWW-Authenticate:DigestWWW-Authenticate:xDigest例如,但我没有find一种方法来执行它在Express中。

我认为中间件passport.authenticate必须设置标题,并且在响应发送到客户端(我认为是在相同的中间件)之前,我无法find改变它的方法。

感谢您的任何想法。

好吧,我只是发现passportjs提供了一个简单的方法来调整响应与自定义callback。

如果它可以帮助任何人,这是我必须去的方式:

 router.route('/login/') .post(function(req, res, next){ passport.authenticate('digest', function(err, user, info){ if(err) return console.log(err); if(!user){ res.set('WWW-Authenticate', 'x'+info); return res.send(401); } req.login(user, function(err){ if(err) return console.log(err); res.redirect('/admin/'); }); })(req, res, next); }); 

如您所见,身份validation方法在中间件内部调用,而不是作为中间件本身。