Passport 를 이용해서 로그인을 구현하자
배우기는 매우 어렵지만... 사용하기는 너무 쉽다! 따라서 한번쯤은 배워볼만하다!!!!!!
생활코딩을 보고 학습하자
id, password와 같은 고전적인 방법으로 먼저 로그인을 해보자
이런 방법을 local 전략이라고 한다.
http://www.passportjs.org/docs/username-password/arrow-up-right 를 참고하자
http://www.passportjs.org/docs/authenticate/arrow-up-right 로 authenticate 미들웨어를 넣자1!!! 2개가 있는데 두 번째 방법을 사용하자
Copy npm install passport
npm install passport-local
Copy app .post ( '/author/login' ,
// 기존에는 여기서 이메일을 검증하고,.. 하는 과정이 있었다!!
passport .authenticate ( 'local' , {
successRedirect : '/author' ,
failureRedirect : '/author/login'
}
)); /author/login 으로 들어오면 passport 가 미들웨어로서 동작하게 한다.
로그인이 성공하면 /author 가고 실패하면 /author/login 으로 다시 오게된다.
그러면 이제 /author/login 여기의 라우팅에서 처리하던 자격인증 코드들을 passport 는 도대체 어떻게 처리해주는거지?
passport 에서 자격증명을 하는 방법
완전 자동으로 해주는건 없다!! 우리가 직접 설정을 해야한다.
여기를 보면 어떻게 자격증명을 해야하는지 나와있다!!arrow-up-right
결론은 우리가 이전에 하던 작업들을 middleware 로서 먼저 등록해놓는다!!!!!!!
이렇게 동작하기 위해서는 브라우저에서 보내줄 때 형식에 맞춰 보내줘야한다!!
여기를 보면 FORM을 보낼 때 어떻게 보내야 하는지 나와있다. FORM을 보자 조금 아래에 있다.arrow-up-right
요약하자면 아이디는 username 으로 보내고 비밀번호는 password 로 보내야 하는거
하지만 우리는 username 이 아니라 email 이잖아?
아래로 조금만 내리면 parameters 가 나오는데 여기를 보고 수정하면 된다.
이렇게까지 하면 아직 뭔가 안된다!!!
왜냐하면 passport.initialize 를 설치하지 않았기 때문!!!!!!!!!!!!! 세션이랑 동시에 이니셜라이즈를 해주자
http://www.passportjs.org/docs/configure/arrow-up-right 의 마지막 부분에 middleware 를 보면 아래의 코드가 있다. Passport 를 이니셜라이즈 해주자!!
위치는 크게 상관없지만 passport.use 전에 실행해주자!
하지만 이렇게 해도 안된다.
Failed to serialize user into session 이런 문구가 뜰 것임
http://www.passportjs.org/docs/configure/arrow-up-right 의 session 부분을 보자
serializeUser, deserializeUser 로그인 과정의 처리를 해준다!!
이 메서드는 언제 호출될까? 로그인이 성공하면!
로그인이 성공하면 그 리턴 값이 여기의 첫 번째 인자로 오게 된다!!!!
Done 의 두 번째 인자로 식별할 수 있는 값을 주자 우리같은 경우는 email 을 주면 될 듯 하다.
email 을 두 번째 인자로 넘겨주면!!!! 이 값이 deserializeUser 메서드의 첫 번째 인자로 들어오게 된다!!!!!!!
세션스토에 로그인 정보를 저장한다.
로그인에 성공하면 이 메서드가 실행되고 세션에 식별자 값을 저장한다. 이후에는 페이지에 들어올 때 마다 디시리얼라이즈만이 실행된다.
페이지에 들어갈 때 마다 이 메서드가 실행되면서 로그인 여부를 검사한다.
페이지에 들어갈 때 마다 이게 실행된다!!!!!
이 메서드는 이제 사용자가 브라우저로 올 때 마다 실행되는데, 자신에게 들어온 id 값을 이용해서 == 세션에 저장되어 있는 값임 DB에서 유저를 찾고, 로그인 성공 여부를 가른다!!