passReqToCallback는 아래의 콜백 데이터로 받을 것인가 그런건데 항상 true로 써 왓음. 딱히 false로 해보진 않앗다.
이제 이메일, 비밀번호가 클라이언트에서 보내주면 콜백 함수에서 email, password 여기에 넘어 온다.
그럼 db에서 (이전 글에 이어 mongodb) 이메일, 비밀번호로 조회 해서 (xss, hash는 이전 글에서 설명 햇으니 패스.) 나온 결과에 맞게 done()을 호출을 한다.
done에 몇개 까지 넣을 수 잇는지는 안 해봣는데 보통 첫 칸이 에러, 2번째 칸이 유저 데이터, 3번째 칸이 넣고 싶은 메세지 정도로 쓴다.
그럼 이 done이 어디로 가냐면 passport.serializeUser() 여기로 넘어 간다. 여기가 로그인 후 세션을 저장 하는 부분이다.
passport.deserializeUser()는 이제 웹 페이지 이동 시 호출 되서 세션에 담은 데이터를 호출 할수 잇게 해 줄 수 잇다.
아래에 /success로 가는 페이지에 req.user가 유저의 세션 데이터를 불러오는 것. (내가 지은게 아니고 모듈에서 지정한 이름)
모듈 만든 사람이 serializeUser에서 가볍게 유저 ID나 키만 저장하고 deserializeUser에서는 serializeUser에 저장한 유저 ID나 키로 DB에서 유저 데이터 조회 후 새로 세션을 갱신하라고 추천하는데 지금은 규모가 작으니 패스.
마지막으로 로그인할 때 처리할 라우터에 passport.authenticate를 적어서 우리가 작성한 passport Strategy를 사용 하게 끔 하면 된다.
req.logIn은 내가 만든 게 아니고 모듈에서 지원하는 건데 세션 적용을 하는 부분이다.
단순하게 form으로 데이터 처리 시에는 passport.authenticate를 미들웨어로 넣어서 처리하면 되는데 위의 사례는 로그인을 ajax로 처리할 때에 적용하는 패스포트 방법이다. 그리고 success로 가는 페이지에 security.isLogin 이 부분에 대해 적자.