我正在尝试更改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),启动一个提示popin,要求用户在检测到此类挑战时进行身份验证(标题中的摘要或基本)。
我读到一个解决方案可能是更改标题,修改
例如WWW-Authenticate:Digest
到WWW-Authenticate:xDigest
,但我找不到在Express中执行此操作的方法。
我认为中间件passport.authenticate必须设置标头,在将响应发送到客户端之前我无法找到更改它的方法(我认为在相同的中间件中)。
感谢任何想法。
答案 0 :(得分:4)
好的,我发现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方法在中间件中调用,而不是作为中间件本身。