passport를 활용한 로그인

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개가 있는데 두 번째 방법을 사용하자

설치하기

npm install passport
npm install passport-local

로그인 프로세스

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-rightsession 부분을 보자

serializeUser, deserializeUser 로그인 과정의 처리를 해준다!!

이 메서드는 언제 호출될까? 로그인이 성공하면!

로그인이 성공하면 그 리턴 값이 여기의 첫 번째 인자로 오게 된다!!!!

Done 의 두 번째 인자로 식별할 수 있는 값을 주자 우리같은 경우는 email 을 주면 될 듯 하다.

email 을 두 번째 인자로 넘겨주면!!!! 이 값이 deserializeUser 메서드의 첫 번째 인자로 들어오게 된다!!!!!!!

시리얼라이즈

세션스토에 로그인 정보를 저장한다.

로그인에 성공하면 이 메서드가 실행되고 세션에 식별자 값을 저장한다. 이후에는 페이지에 들어올 때 마다 디시리얼라이즈만이 실행된다.

디시리얼라이즈

페이지에 들어갈 때 마다 이 메서드가 실행되면서 로그인 여부를 검사한다.

페이지에 들어갈 때 마다 이게 실행된다!!!!!

이 메서드는 이제 사용자가 브라우저로 올 때 마다 실행되는데, 자신에게 들어온 id 값을 이용해서 == 세션에 저장되어 있는 값임 DB에서 유저를 찾고, 로그인 성공 여부를 가른다!!

Last updated