2013-11-24 3 views
0

나는 (사용자/패스가 구성된 경우) 동적 경로와 basicAuth를 사용하여 설정합니다. 여기에 내가 가진 무엇 :NodeJS - 익스프레스 바이 패스 basicAuth

var basicAuth = express.basicAuth, 
auth = function(req, res, next) { 
    if (config.hasOwnProperty(req.params.project)) { 
     var auth = config[req.params.project].auth; 
     if (auth) { 
      basicAuth(function(user, pass, callback) { 
       // Check credentials 
       callback(null, user === auth.user && pass === auth.pass); 
      })(req, res, next); 
     } else { 
      // No authentication 
      return true; 
     } 
    } 
}; 

그런 다음, 내 경로는 다음과 같습니다

app.get("/:project", auth, function (req, res) { 
    ... 
}); 

그것은 auth.userauth.passauth 객체를 포함하거나 false로 설정하거나 파일에서 설정을 얻고있다. false으로 설정하면 (분명히) 인증을 건너 뛰고 싶습니다.

basicAuth는 켜져 있으면 작동하지만 동적으로 무시하는 방법을 알아낼 수 없습니다.

답변

2

Connect는 미들웨어의 반환 값을 확인하지 않으므로 true을 반환해도 아무런 의미가 없습니다. Connect가 계속 진행할 수 있도록 next 함수를 호출해야합니다.

var basicAuth = express.basicAuth, 
auth = function(req, res, next) { 
    if (config.hasOwnProperty(req.params.project)) { 
     var auth = config[req.params.project].auth; 
     if (auth) { 
      basicAuth(function(user, pass, callback) { 
       // Check credentials 
       callback(null, user === auth.user && pass === auth.pass); 
      })(req, res, next); 
     } else { 
      // No authentication 
      next(); 
     } 
    } 
}; 

또한 basicAuth 콜백이 동기가 될 수있는 것처럼, 그것은 본다, 그래서이 일을 아마 청소기 : 당신은 다만 수 있도록

basicAuth(function(user, pass) { 
    // Check credentials 
    return user === auth.user && pass === auth.pass; 
})(req, res, next); 

마지막으로, basicAuth 다른 대체 형식은 다음과 같습니다

basicAuth(auth.user, auth.pass)(req, res, next); 
+0

하, 글쎄, 그건 완전히 의미가 있습니다. – Fluidbyte

+0

도와 드리겠습니다. 다른 몇 가지 의견으로도 업데이트되었습니다. – loganfsmyth