회원가입과 로그인을 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복잡한 작업이 많으므로 검증된 모듈을 사용하는 것이 좋다. Passport 모듈은 이름처럼 서비스를 사용할 수 있게 해주는 여권 같은 역할을 한다.

요즘에는 서비스에 로그인할 때 아이디와 비밀번호를 사용하지 않고 구글, 페이스북, 카카오톡 같은 기존의 SNS 서비스 계정으로 로그인하기도 한다. 이 또한 Passport를 사용해서 해결할 수 있다.

먼저, Passport 관련 패키지들을 설치한다.

npm i passport passport-local passport-local-mongoose

설치 후 Passport 모듈을 미리 app.js와 연결한다.

passport.initialize 미들웨어는 요청(req 객체)에 passport 설정을 심고, passport.session 미들웨어는 req.session 객체에 passport 정보를 저장한다. req.session 객체는 express-session 에서 생성하는 것이므로 passport 미들웨어는 express-session 미들웨어보다 뒤에 연결해야 한다.

[app.js]

const passport = require("passport");
const LocalStrategy = require("passport-local");
const User = require('./models/user');

app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));

passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

모듈 내부를 보면 passport.serializeUser 와 passport.deserializeUser 가 있다. 이 부분이 Passport 를 이해하는 핵심이다.

serializeUser 는 로그인 시 실행되며, req.session(세션) 객체에 어떤 데이터를 저장할 지 정하는 메서드이다.