Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

passport.js에서 인증 모킹(Mocking) 하기

소셜 인증에 Passport.js를 사용하다 보니 인증이 필요한 개발을 하면서 매번 인증을 해야해서 무척 귀찮았다. 한두번도 아니고 수정할 때마다 서버를 내렸다 올리면 세션이 날라가니까 인증도 다시해야하고 클릭몇번이긴 하지만 무척 귀찮았다. 해당 내용이 정확히 가이드에 나와있지 않아서 좀 헤맸지만 passport.js의 인증을 모킹하는 방법을 찾아서 편리하게 사용하고 있다.

var mockLogin = function(req, res, next) {
  if (req.isAuthenticated()) { return next(); }
  var user = {
    nickname: 'Outsider',
    // ...
  };
  req.login(user, function(err) {
    next(err);
  });
};

위와 같은 함수를 만든다. passport가 요청에 기반해서 동작하므로 요청객체가 필요하다. 현재의 요청이 인증되었는지 여부는 isAuthenticated() 함수를 사용해서 확인할 수 있다. 이 함수가 true인 경우는 인증된 상태이므로 추가 처리를 하지 않아도 된다. 보통 사용자 정보를 담고 있는 객체를 만들고(뭐 정보는 기존에 인증할 때의 사용자 객체를 출력해서 사용하면 된다.) 이를 req.login() 함수에 전달하면 passport가 로그인 처리를 한다. 코드를 보면 알겠지만 express.js기반(정확히는 Connect기반)으로 작성한 미들웨어다. (next()다음 미들웨어로 넘기는 것이다.)

app.configure(function() {
  // ...
  app.use(passport.initialize());
  app.use(passport.session());
  if (isDev) {
     app.use(mockLogin);
  }
  app.use(app.router);
  // ...
});

mockLogin 함수를 express.js의 설정부분에서 미들웨어로 등록한다. passport 설정후에 추가하면 되고 대신 app.router보다는 상단에 넣어야 동작한다.(real에서는 필요없으므로 개발환경에서만 동작하도록 했다.)
2013/02/22 23:44 2013/02/22 23:44