사용자가 웹 페이지에서 사용자의 정보를 전송하면, 미들웨어로 전송하게 되고, 미들웨어의 local 에 의해서 passport 에 등록된 localstrategy 라는 객체의 콜백함수가 실행된다.

실행되면 사용자가 입력한 사용자의 정보값이 첫 번째(username)와 두 번째 인자(password)로 들어가게 된다.

사용자가 맞다면, done 에 user를 전달하고, 로그인을 진행하고,

사용자가 다르다면, done에 false 를 전달하고, 로그인 실패 처리를 한다.

done 이 실행되고서, sessions 라는 부분이 실행되는데,

Documentation: Username & Password

로그인이 인증되었는지 아니었는지의 여부를 세션을 통해서 유지한다.

passport를 통해서 세션을 사용하겠다고 선언을 했기에, 세션 부분을 설정해줘야한다.

해당 코드를 passport.use 전에 작성한다.

기본적인 코드 형태

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

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

내 코드에 맞도록 값을 변형시킨다.

passport.serializeUser(function(user, done) {
  console.log('serializeUser', user);
  done(null, user.username);
});

passport.deserializeUser(function(id, done) {
  console.log('deserializeUser', id);
  for(var i =0; i <users.length; i++){
    var user = users[i];
    if(user.username === id){
      return done(null, user);
    }
  }
});

passport.use 에서 전달한 done 의 두 번째 인자가 false 가 아닐 때, 해당 함수가 호출된다.