본문 바로가기

웹개발/웹 개발 & 프로그래밍

passport js의 session은 어떻게 동작할까?

Passport.js는 Node JS의 인증모듈이다. 몹시 편리하다!!

 

뭐... 구글링을 통해 어떻게든 사용은 하고 있는데... 그 동작원리가 궁금했다.

 

아... 이거 어떻게 돌아가는 거지...

 

 

app.js

 

모든 요청은 app을 타고 들어온다. 예를 들어서 위에서부터 차례대로 helmet, cookie_parser, bodyParser... 를 동작한 다음 passport initialize가 실행된다. 공식 문서에 따르면 Express-Based Application에서 passport를 쓰려면 초기화를 해줘야한다. 

 

뭐 암튼, 지금은 로그인을 한 적이 없으니 클라이언트의 세션에 아무 정보도 기록되어있지 않다.

그런데 로그인을 성공적으로 하게되면 인증이 완료되고 serializerUser 함수가 실행된다. 

 

passport의 authenticate Strategy!

serializeUser 함수를 통과하면서 클라이언트는 Session ID를 가지고 있고, 서버는 그 유저에 대한 정보를 지니고 있다. 

 

아까도 얘기했지만 모든 Request는 app을 통과하는데 그 app에서 passport.session을 실행한다! 만약 request를 날리는 클라이언트가 session을 가지고 있다면??? 

 

passport.deserializeUser가 실행되면서 req.user에 그 유저에 대한 정보가 기록된다. 반복적으로 로그인을 할 필요가 없을 뿐더러 서버는 편리하게 유저의 정보를 확보할 수 있다. 

 

예를 들어서 이런 함수를 만들어서 접근제어를 할 수 있다. req에 user가 있으면 인증된 사용자이고 없으면 인증되지 않은 사용자이다!

 

request가 들어올 때마다 session을 활용해서 user 정보를 확인하므로 매우 편리하게 User Handling이 가능하다는 게 Passport의 장점인 것 같다. 

 

더욱 자세한 사항은 공식문서롤 참조하자. 

 

http://www.passportjs.org/