๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ›  Node.js web development

์›น๊ฐœ๋ฐœ - 4 ํŒจ์Šค์›Œ๋“œ ํ•ด์‹ฑ/๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ

by hanwitjus 2021. 11. 10.

์ˆ˜์ •๋œ ์‚ฌํ•ญ

  • Passport.js๋ฅผ ์‚ฌ์šฉํ•œ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ hash, salt ๊ฐ’์œผ๋กœ ์ €์žฅํ•จ
  • ๋กœ๊ทธ์ธ ์„ธ์…˜ ์œ ์ง€
  • ๋กœ๊ทธ์ธ ์ƒํƒœ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์— ํ‘œ์‹œ
  • errorPage UI ์ˆ˜์ •

 

์ด๋‹ค.

 

์‚ฌ์‹ค Passport.js๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ์„ธ์…˜ ์œ ์ง€๋ž‘ ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋Š” ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค.

 

์•„๋ฌดํŠผ ๊ทธ๋ž˜์„œ ์ˆ˜์ •๋œ ์ฝ”๋“œ๋“ค์€ ์ด๋ ‡๋‹ค.

 

registerController.js

 

User ๋ชจ๋ธ์ด Passport.js๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด Passport.js์—์„œ ์ œ๊ณตํ•˜๋Š” register ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํšŒ์›๊ฐ€์ž… ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. (์—ฌ๊ธฐ์„œ ๋ญ”๊ฐ€ ์ž˜๋ชป๋๋Š”์ง€ ์ž˜ ์•ˆ๋˜๋Š” ์ ์ด ์žˆ๋Š”๋ฐ ๋ฐ‘์—์„œ ๋‹ค์‹œ ์„ค๋ช…ํ•˜๊ฒ ์Œ)

 

์•”ํŠผ ์ €๋ ‡๊ฒŒ ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ•˜๋ฉด, ํŒจ์Šค์›Œ๋“œ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ ์†”ํŠธ์™€ ํ•ด์‹ฑ๊ฐ’์ด ์ž๋™์œผ๋กœ ์ €์žฅ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ

 

 

 

๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ๋กœ์ง์ด๋‹ค.

userController.js

 

์—ฌ๊ธฐ์„œ๋„ Passport.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ๊ณผ ๋กœ๊ทธ์•„์›ƒ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ”๋“œ ๋ช‡์ค„๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋กœ๊ทธ์ธ ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ์€ ์ž˜ ๋œ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ๋กœ๊ทธ์ธ์ด ์œ ์ง€๋˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๋„ค๋น„๊ฒŒ์ด์…˜๋ฐ”๋ฅผ ์ˆ˜์ •ํ•˜์˜€๋‹ค.

๊ทธ ์ „์— ํ˜„์žฌ ์„ธ์…˜์— ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด์„œ main.js์˜ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜์— ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.

 

main.js

์ด๋ ‡๊ฒŒ Passport.js์—์„œ ์ œ๊ณตํ•˜๋Š” isAuthenticated() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€ true/false๊ฐ’์„ loggedIn ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด ๋กœ๊ทธ์ธ ๋œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ currentUser ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑด ์ด์ œ flashMessages ์ฒ˜๋Ÿผ ๋ทฐ์—์„œ ๊ฐ–๋‹ค์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ layout.ejs๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์„œ ๋กœ๊ทธ์ธ์ด ์•ˆ๋˜์–ด์žˆ์„ ๋•Œ๋Š” login / register ๊ฐ€ ๋œจ๊ฒŒ ํ•˜๊ณ ,

๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ์œผ๋ฉด ํ˜„์žฌ ๋กœ๊ทธ์ธ ๋œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ๋ณด์—ฌ์ฃผ๊ณ  ๋กœ๊ทธ์•„์›ƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”๋‰ด๋ฅผ ๋„์›Œ์ค€๋‹ค.

 

layout.ejs

 

 

๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ •๋œ ์—๋ŸฌํŽ˜์ด์ง€๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ๋‹ค.

 

 

 

 

 

์ˆ˜์ • ๋ฐ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์˜ ์‹คํ–‰์˜์ƒ์ด๋‹ค.

 

 

 

 

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ๊ณ ์น˜์ง€ ๋ชปํ•œ ๋ฌธ์ œ๋Š”, ํšŒ์›๊ฐ€์ž…์„ ํ• ๋•Œ DB์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ๋œ ๊ฐ’์€ ์ €์žฅ์ด ๋˜๋Š”๋ฐ

ํšŒ์›๊ฐ€์ž…์ด ์™„๋ฃŒ๋˜๊ณ  ๋‚˜์„œ index ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ด ์ด๋ค„์ง€์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ if๋ฌธ๊ณผ else๋ฌธ ๊ฐ๊ฐ์— ์ฝ”๋“œ์— ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ดค๋Š”๋ฐ

 

 

๋ณด๋‹ค์‹œํ”ผ if๋ฌธ๊ณผ else๋ฌธ ๋‘˜๋‹ค์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์™œ ์ด๋Ÿฌ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ด๊ฑฐ ๊ณ ์น˜๊ณ , Validator๊ฐ€ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋ฉด 

ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ์€ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๋๋‚œ๋‹ค. ํ›„...

 

 

 

(+ 2021.11.10 17:30 ์ˆ˜์ •)

 

์ƒ๊ฐ๋ณด๋‹ค ํฐ๋ฌธ์ œ๊ฐ€ ์•„๋…”๋‹ค...ใ…‹ ์—ญ์‹œ ๋งจ๋‚  ์ฝ”๋”ฉํ•  ๋• ์ž์ž˜ํ•œ ์‹ค์ˆ˜ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

์•”ํŠผ ๋ฌธ์ œ๋Š” ๊ฑ main.js ์—์„œ register์— ๋งคํ•‘ํ• ๋•Œ redirectView ์•ก์…˜๊นŒ์ง€ ๋งคํ•‘์„ ์•ˆํ•ด์ค˜์„œ ๊ทธ๋Ÿฐ๊ฑฐ์˜€๋‹ค...^^

 

 

์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  ํšŒ์›๊ฐ€์ž… ๋‹ค์‹œ ์ง„ํ–‰ํ•ด๋ณด๋‹ˆ๊นŒ

 

์ž˜๋œ๋‹คใ…‹ใ…‹ใ…‹

 

์ด์ œ Validator๋งŒ ํ•˜๋ฉด ๋œ๋‹ค!!

 

 

 

LIST

๋Œ“๊ธ€