honey_pot

[Node.js] Passport, express-session 으로 회원가입, 로그인, 로그아웃 하기 본문

Node.js

[Node.js] Passport, express-session 으로 회원가입, 로그인, 로그아웃 하기

_tera_ 2021. 6. 18. 15:36

http://www.passportjs.org/

https://www.npmjs.com/package/passport-local-mongoose

https://www.npmjs.com/package/express-session


설치

$ npm i passport passport-local passport-local-mongoose express-session

 


express-session 사용법

다운받은 패키지를 모두 불러온다.

passport-local 패키지는 passport-local-mongoose를 사용하기 위해 필요한 패키지이여서 직접 사용하지 않기 때문에 불러오지 않는다.

 

 

 

 

saveUninitialized : 초기화되지 않은 세션을 저장소에 저장한다. false 일 경우 쿠키가 초기화되지 않은 session에서 반응하지 않는다. 또한 로그인 세션을 구현하거나, 서버저장소 사용을 줄이고, 쿠키를 세팅할때 허가를 구하는 법을 준수할때유용하다.

 

 

 

 

passport.initialize() : passport 패키지를 초기화한다. 

passport.session() : passport 패키지의 session을 사용

 

 

 

js 타입의 데이터로 만든 userSchema를 passport-local-mongoose 패키지를 통해 mongodb에 저장한다.

 

 

serialize : 쿠키 내에 사용자 정보를 저장

deserialize : 사용자 정보가 담긴 쿠키를 엶

 

예시 코드의 밑 세 줄의 코드

passport.use(User.createStrategy());

passport.serializeUser(User.serializeUser());

passport.deserializeUser(User.deserializeUser());

app.js 에 붙여넣는다.

 

 

서버를 구동하면 이런 warning이 뜰 수 있다.

해당 warning은 mongoose 관련 warning이다.

 

 

 

해결방법은 mongoose.connect(~~~~);  코드 밑에

mongoose.set('useCreateIndex', true); 를 추가한다.

 

 

 

회원가입 

 

passport-local-mongoose doc

 

p-l-mongoose가 제공하는 User.register() 메서드를 통해 회원가입을 진행하면서

passport.authenticate() + "local"storage 메서드를 이용해서 req와 res 의 정보가 일치하는지 확인한다. 일치하면(true) => function(){ secrets 라우트로 redirect 한다.}

회원가입이 완료되면 로그인한 정보 즉 세션을 가진채로 secrets 라우트로 들어가야하기 때문에

app.get("/secrets") 메서드를 만들어줘야 한다.

 

 

 

 req.isAuthenticated() 메서드를 통해 권한인증을 받았는지 확인하고

true라면 secrets 페이지를 렌더하고

false라면 login 라우트로 이동한다.

 

 

 

 

비밀번호 "123456" 으로 회원가입했을 때 데이터베이스에 저장되는 데이터이다.

passport-local-mongoose 패키지는 다른 암호화 패키지 없이 salting과 hashing을 자동으로 해준다.

 

 

 

가입한 아이디로 로그인한 정보가 쿠키에 저장되어있다.

Content 콘텐츠 부분이 express-session 패키지가 connect.id 쿠키 내에 생성한 정보이다.

Expire 만료의 '탐색 세션이 종료될 때' 는 크롬이 종료될 때를 의미한다.

그러므로 크롬을 종료하면 해당 페이지에 로그인한 정보가 사라져서 다시 들어갔을 때 로그인을 해야한다.

 

 

로그인

 

 

passport doc

 

passport 가 제공하는 login() 메서드를 이용해서 user 객체를 로그인한다.

메서드 성공시 authenticate() 메서드로 req와 res의 정보의 쿠키 정보를 확인하고 인증결과가 true면 secrets 라우트로 이동한다.

 

로그아웃

 

passport doc

 

Passport가 제공하는 logout() 메서드를 이용해

req.logout(); 로그아웃 요청을 수행

그 후 res.redirect("/") 홈 라우트로 이동한다.

 


 

🔆 nodemon을 사용하거나 node app.js 로 node 서버를 껐다 켜게 되면

세션이 끊겨서 로그인 정보가 저장된 쿠키가 사라진다.

Comments