전략 패턴(strategy pattern) 은 정책 패턴(policy pattern)이라고도 하며, 객채의 행위를 바꾸고 싶은 경우 ‘직접’ 수정하지 않고 전략이라고 부르는 **‘캡슐화한 알고리즘’**을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴입니다.

컨텍스트
passport.use(new LocalStrategy(…)) 처럼 passport.use() 라는 메서드에 ‘전략’을 매개 변수로 넣어서 로직을 수행하며, 이 ‘전략’만 바꿔서 다른 방식으로 인증할 수 있다.// LocalStratege
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
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, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
// FacebookStrategy
var passport = require('passport')
var FacebookStrategy = require('passport-facebook').Strategy;
passport.use(new FacebookStrtegy({
clientId: FACEBOOK_APP_SECRET,
clientSecret: "<http://localhost:3000/auth/facebook/callback>"
},
function(accessToken, refreshToken, profile, cb) {
User.findOrCreate({ facebookId: profile.id }, function (err, user) {
return cb(err, user)
});
}
));