개발자취

TIL | Passport 본문

개발/Dev | 웹개발

TIL | Passport

hnhnhun 2022. 9. 7. 18:10

Passport 정의

  • Passport.js : 여러 플랫폼에서의 가입 정보 중 username과 password를 가져와서 로그인 구현을 쉽게 해놓은 OAuth 패키지로, Node.js용 요청을 인증하는 express 호환 미들웨어이다.

Passport Strategies

  • Passport는 앱의 용도에 맞는 전략을 configuration 파일에 미들웨어로 작성하고 사용해야한다.
  • 미들웨어에 작성하는 코드는 다음과 같이 작성한다.
passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));
  • 패캠강의 내용에 따르면 passport는 플랫폼에 관계없이 비슷한 방법으로 구현된다고 한다.

Passport Sessions

  • Passport는 로그인 세션을 유지시켜준다. 세션 유지를 위해서는 인증된 사용자의 정보를 세션에 전송/저장이 가능한 데이터로 만드는serialized data로 만들어 주거나, 이와 반대인 deserialized 시켜준다.
  • Passport는 사용자의 기록이 저장되는 방식에서 어떤 제약이 없지만, 꼭 필요한 serialization/deserialization logic을 passport 함수로 제공해야한다.
  • 최소(?)로 작성해야 하는 코드는 다음과 같다.
passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(id, done) {  
User.findById(id, function (err, user) {  
done(err, user);  
});  
});

Middleware

  • Express나 Connect-based 앱에서 Passport를 사용하기 위해 passport.initialize() 미들웨어가 필요하다.
  • 구현하는 앱에서 로그인 세션을 계속 유지하려면, passport.session() 미들웨어가 반드시 필요하다.
  • 이와 관련하여 구현하는 예시는 다음과 같다.
var app = express();  
app.use(require('serve-static')(\_\_dirname + '/../../public'));  
app.use(require('cookie-parser')());  
app.use(require('body-parser').urlencoded({ extended: true }));  
app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));  
app.use(passport.initialize());  
app.use(passport.session());

Autheticate Requests

  • Passport는 autheticate() 함수를 제공한다. 이 함수는 인증(authenticate) 요청 라우트 미들웨어에 사용된다.
  • 이와 관련한 예시는 다음과 같다.
app.post('/login',  
passport.authenticate('local', { failureRedirect: '/login' }),  
function(req, res) {  
res.redirect('/');  
});

Strategies

  • Passport.js
  • 공식 문서에 다양한 예시가 존재한다. 전략에 맞게 작성하면 된다.

*공부한 내용을 기반으로 작성하여, 오기된 정보가 있을 수도 있으니 오류가 있으면 댓글로 남겨주시면 감사드리겠습니다!

Comments