2

Nodejs의 WWW-Authenticate 헤더에서 보낸 헤더 challenge를 변경하려고합니다. passportjs를 사용passportjs 응답 전에 Expressjs/Change

, 내 현재 서버 코드는 다음

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 코드 응답 (즉, 이동하는 일반적인 방법입니다)하지만, 대부분의 브라우저를 보내 다이제스트 (웹킷 이상), 사용자가 헤더에서 그러한 챌린지 (다이제스트 또는 기본)를 감지 할 때 인증하도록 요청하는 프롬프트 팝업을 실행합니다.

예를 들어, 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); 
    }); 

, 인증 용 방법은 미들웨어 내부가 아닌 미들웨어 그 자체라고한다 : 그것은 사람을 도울 수 있다면

, 여기에 내가 가야했다 방법입니다.