Node.js Expressjs/passportjs响应前更改标头
我正在尝试更改在Nodejs的WWW-Authenticate报头中发送的报头质询 使用passportjs,我当前的服务器代码如下:Node.js Expressjs/passportjs响应前更改标头,node.js,authentication,express,passport.js,digest-authentication,Node.js,Authentication,Express,Passport.js,Digest Authentication,我正在尝试更改在Nodejs的WWW-Authenticate报头中发送的报头质询 使用passportjs,我当前的服务器代码如下: router.route('/login/') .get(function(req, res){ if(req.isAuthenticated()) res.redirect('/admin/'); else res.render('admin/partials/login.html'); }) .p
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)都会启动一个提示popin,要求用户在检测到标题中的此类质询(摘要或基本)时进行身份验证
我读到一个解决方案是更改标题,修改
例如,WWW-Authenticate:Digest
到WWW-Authenticate:xDigest
,但我在Express中找不到这样做的方法
我认为中间件passport.authenticate必须设置头,在将响应发送到客户端之前,我找不到更改头的方法(我认为是在同一个中间件中)
谢谢你的建议。好的,我发现passportjs提供了一种简单的方法,可以通过自定义回调调整响应 如果它能帮助任何人,以下是我必须走的路:
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);
});
如您所见,authenticate方法是在中间件内部调用的,而不是作为中间件本身调用的