본문 바로가기
Programming/Node.js

[Node.js] passport 모듈을 이용해서 session 처리하기

by 코딩의성지 2020. 1. 14.

하이 ~~!!

 

진짜 진짜 오랜만에 글을쓴다 ㅎㅎ 거의 10일 만인가 ㅎㅎ ㅜㅡㅜ 

 

회사일이 조금 바빠서 집에 오면 녹초가 돼서 잠만잤다 ㅜㅜ 게으른 나를 반성하면서 오랜만에 글을 써본다.

 

오늘은 passport라는 모듈을 이용해서 session 처리를 해볼거다. 뭐 그렇게 어렵지 않다. 이해하기 쉽도록

 

회원가입 로직을 간단하게 만들어서 예제를 보여주려고한다.  예제는 아래 도큐먼트를 참고해서 만들었다. 자세하게 공부하고 싶은 분들은 링크를 참고해서 공부해보자.

 

http://www.passportjs.org/docs/

 

Documentation

Overview Passport is authentication middleware for Node. It is designed to serve a singular purpose: authenticate requests. When writing modules, encapsulation is a virtue, so Passport delegates all other functionality to the application. This separation o

www.passportjs.org

 

그럼 본격적으로 시작 한번 해보자.

 

passport 모듈이란?

 

passport는 인증 절차에 대한 로직을 편하게 코딩할 수 있도록 도와주는 Node.js 미들웨어이다. 특히 passport에서는 세션관리를 할 때 자주 사용된다. 간단하게 말하자면 로그인 되어 있는지 안되어있는지에 확인을 위해 상태값을 유지해줘야하는데 이게 바로 세션이다. 이걸 passport 모듈을 이용해서 처리할 수 있다.

 

물론 상태값을 유지하지 않는 토큰 방식의 인증 방식도 있지만( 페북으로 로그인하기 카카오로 로그인하기 같은 소셜 로그인이 이런 방식이다. ) 오늘은 세션을 이용한 인증 방식을 공부해 볼것이다.

 

오늘 할 것은 간단하다. 간단한 회원가입 로직인데.. passport 를 이용해서 db에 값을 저장하고 세션을 만들어서 이용하는 것 까지 해볼꺼다.

 

passport를 이용한 회원가입 로직 만들기

 

먼저 관련된 모듈을 다 설치해주자.

 

 

passport 모듈 이외에 몇가지를 더 설치해줬다. 간단하게 말하자면 세션 처리를 로컬 디비에서 할 수 있게 도와주는 passport-local, 세션 처리를 할 수 있게해주는 express-session, 에러메시지 같은 걸 redirect 과정에서 쉽게 전달할 수 있게 해주는 connect-flash 를 설치했다 ㅎㅎ

 

자 설치가 끝났으면..  app.js 에 아래의 코드를 작성해주자.

 

 

app.use(session({ . . . })) 안에서 세션에 대한 세부적인 설정을 할 수 있는데... 나는 그냥 기본 값을 썼다. ㅎㅎ 조금 더 세세한 기능을 구현하고 싶은 분들은 위의 링크를 참조해서 공부하고 해보도록 하자 !! ㅎㅎ

 

자..!! 이제 집중하자..!! ㅎㅎ 

 

 

일단 전에 포스팅에서 만들어 뒀던 join.js 에 위의 코드를 코딩하자. 간단하게 코드를 설명하겠다. 

 

먼저 passport.use('local-join', new LocalStrategy ( ~~~~  는 id 와 password를 저장할 local-join이라는 이름의 local strategy를 만들어 사용하는 코드이다. url 호출 시 동작하는 콜백 함수가 있는데 여기서 쿼리를 처리해주면 된다.

그리고 여기서 id 값을 저장하는 것을 볼 수 있는데,  serializeUser~~ 와 deserializeUser를 이용해서 세션을 뽑아와서 id 값을 전달 할 수 있다.

 

그리고 passport.use('local-join', new LocalStrategy ( ~~~~ 에서 보면

이미 디비에 아이디가 있는 경우( 가입에 실패한 경우) 와 없는 경우 (가입에 성공한 경우) 에 return 하는 게 다르다.

전자는

 

후자는

이렇게 리턴을 하고 있다. 성공했을때는 세션 값으로 id 값을 보내고 실패한 경우는 메시지를 보내고 있다. 그리고 실패한 경우는 두번째 파라미터에 false 값이 들어가는 것도 확인할 수있다.

 

이제 실제로 url 에 붙여 보자.

 

위의 코드는 더 간단하다. 가입에 성공할 경우에는 /joinOk로 redirect하고 실패할 경우에는 /joinForm으로 redirect한다는 의미이다. 각각의 api 함수는 아래와  같다.

 

굉장히 코드가 쉽다. /joinOk에서는 session에서 뽑아온 id 값을 이용해 joinOk.ejs 파일을 불러오고, /joinForm 에서는 저장한 에러 메시지를 이용해 join.ejs 파일을 불러온다.

 

각각의 ejs 파일을 보여주면  joinOk.ejs는 

 

join.ejs는 

이다... ㅎㅎㅎ 아주 간단하지...?? ㅎㅎ

 

이렇게 해주고 웹서버를 기동해보면 ..! 아래와 같은 결과를 볼 수 있다.

 

<회원 가입 폼>

 

<DB에 이미 있는 ID를 입력한 경우 ( 회원가입에 실패 한 경우)) >

 

 

<DB에 없는 ID를 입력한 경우 ( 회원가입에 성공 한 경우)) >

 

 

후...!! 성공적으로 이렇게 세션관리가 되는 걸 볼수 있다.. ㅎㅎ 다들 코드를 꼭 작성해 보길 바란다.

그럼 오늘은 여기까지 ~~ 열코딩하자 ~~!!

반응형

댓글