2

我正在嘗試更改在Nodejs中的WWW-Authenticate標頭中發送的標題挑戰。Expressjs /在passportjs響應之前更改標題

使用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的例子,但我沒有找到一個方法來做到這一點的快遞。

我認爲中間件passport.authenticate必須設置標題,並且在響應發送到客戶端之前我找不到方法來更改它(在我認爲是相同的中間件中)。

感謝您的任何想法。

回答

2

好吧,我只是發現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); 
    }); 

正如你所看到的,在認證方法被稱爲中間件內,而不是作爲一箇中間件本身。

相關問題