【问题标题】:Expressjs / Change header before passportjs responseExpressjs /在passportjs响应之前更改标题
【发布时间】:2014-06-08 12:48:17
【问题描述】:

我正在尝试更改 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)会启动提示弹窗,要求用户在检测到此类挑战时进行身份验证(摘要或基本)在标题中。

我读到一个解决方案可能是更改标题,修改 例如WWW-Authenticate:DigestWWW-Authenticate:xDigest,但我在 Express 中找不到方法。

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

感谢您的任何想法。

【问题讨论】:

    标签: node.js authentication express passport.js digest-authentication


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2012-09-07
      • 2018-12-07
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多