gpt4 book ai didi

node.js - Expressjs/在 passportjs 响应之前更改 header

转载 作者:搜寻专家 更新时间:2023-10-31 23:42:56 25 4
gpt4 key购买 nike

我正在尝试更改在 Nodejs 的 WWW-Authenticate header 中发送的 header 质询。

使用 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:DigestWWW-Authenticate:xDigest,但我找不到在 Express 中执行此操作的方法。

我认为中间件 passport.authenticate 必须设置 header ,我找不到在将响应发送到客户端之前更改它的方法(我认为在同一个中间件中)。

感谢您的任何想法。

最佳答案

好吧,我只是发现 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 方法是在中间件内部调用的,而不是作为中间件本身调用的。

关于node.js - Expressjs/在 passportjs 响应之前更改 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24106316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com