honey_pot
[Node.js] Passport, express-session 으로 회원가입, 로그인, 로그아웃 하기 본문
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); 를 추가한다.
✔ 회원가입
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 가 제공하는 login() 메서드를 이용해서 user 객체를 로그인한다.
메서드 성공시 authenticate() 메서드로 req와 res의 정보의 쿠키 정보를 확인하고 인증결과가 true면 secrets 라우트로 이동한다.
✨ 로그아웃 ✨
Passport가 제공하는 logout() 메서드를 이용해
req.logout(); 로그아웃 요청을 수행
그 후 res.redirect("/") 홈 라우트로 이동한다.
🔆 nodemon을 사용하거나 node app.js 로 node 서버를 껐다 켜게 되면
세션이 끊겨서 로그인 정보가 저장된 쿠키가 사라진다.
'Node.js' 카테고리의 다른 글
[Node.js] Passport를 이용한 Google OAuth 로그인 구현 (0) | 2021.06.19 |
---|---|
[Node.js] bcrypt 를 이용해 round salting + hashing 하기 (0) | 2021.06.18 |
[Node.js] MD5 를 이용해 Hash 암호화하기 (0) | 2021.06.18 |
[Node.js] dotenv를 이용해 암호화하기 (0) | 2021.06.18 |
[Node.js] Mongoose - encryption 사용해서 비밀번호 암호화하기 (0) | 2021.06.18 |