이번 글에서는 사용자를 가입시킨 후 Passport로 로그인하는 과정을 다루겠습니다.
1) 우선, join을 처리하는 postjoin 컨트롤러를 미들웨어로 바꿔야 합니다.
그리고 res.redirect(routes.home)을 catch문 안쪽으로 옮겨줍니다.
왜냐하면 사용자를 다른 페이지로 보낼 것이 아니라, 바로 로그인 시켜주기 위함입니다.
미들웨어로 바꾸는 이유는 뒤에서 자세하게 설명하겠습니다.
2) 다음은 globalrouter.post(routes.join, postJoin)에 postLogin을 추가합니다.
이것이 앞에서 postJoin 컨트롤러를 미들웨어로 바꿔준 이유입니다.
이를 통해 Join 화면에서 username과 password를 넣어줬을 때,
postJoin에서 가입을 시키고 postLogin에서 바로 로그인을 시키는 것이 가능해집니다.
3) 다음은 userControllers.js로 이동해서
import passport from "passport" 를 추가하고, postLogin 컨트롤러를 수정합니다.
여기서 passport의 인증 방식은 'local'이고 username과 password를 찾아보도록
설정되었다는 것을 유의해야 합니다.
또한 2가지 옵션(failureRedirect, successRedirect)을 추가할 수 있습니다.
Passport의 옵션에 관해서는 Passport의 공식 문서에서 확인할 수 있습니다.
4) 다음은 middlewares.js로 이동해서
res.locals.user = req.user || {}; 를 추가합니다.
Passport는 쿠키나 Serialize, Deserialize 등의 기능을 다 지원해줌은 물론이고
User가 담긴 Object를 요청(request)에도 올려줍니다.
그리고 이렇게 작성해야 우리의 template이 이 user에 접근 가능하게 할 수 있습니다.
5) 다음은
(1) app.js로 이동해서 4줄의 코드를 추가해줍니다.
이 때, app.use(passport.initialize()); 를 저 위치에 써준 이유는
위에서 실행된 Cookieparser로부터 쿠키가 쭉 내려와서
passport는 initialize되고, passport가 제 스스로 쿠키를 들여다봐서
그 쿠키 정보에 해당하는 사용자를 찾아주기 때문입니다.
(2) 그리고 passport는 자기가 찾은 그 사용자를 요청(request)의 object,
즉, req.user로 만들어줍니다.
그러면 그 user object를 template에 추가시켜줄 수 있습니다.
예를 들어, header.pug로 이동하면 사용자가 인증이 되었나 안되었나 확인하는 부분(!user.isAuthenticated)이 문제 없이 작동합니다.
다음 글에서는 session과 관련된 패키지를 설치하고,
실제 로그인 Authentication이 잘 작동하는지 확인해보겠습니다.
"다음은 노마드코더(https://academy.nomadcoders.co/)의 [초급 풀스택] 유튜브 클론 코딩 강의를 참고하였습니다."