在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:Digest
为WWW-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方法在中间件内部调用,而不是作为中间件本身。
- 是否有一个node.js框架提供像spring-security一样的授权和authentication?
- 什么是更好的方式来validationExpress 4路由器上的一些路由?
- 如何以编程方式login到使用Google身份validation的网站
- 是否可以在Express上的白名单路由中应用基本身份validation/中间件?
- 使用Facebook和Passportjs进行身份validation:什么是accessToken,注册后应该存储什么?
- 在NodeJS中使用REST APIauthentication困惑
- Node.js中使用http.client进行摘要式身份validation的问题
- 使用passport-local和bcrypt在node.js中检查和更新密码
- 检测提供商注销passport.js?