๐ŸŸ ํ•ด์‹ฑ ๐Ÿฅ  ์ฟ ํ‚ค ๐ŸŽŸ ์„ธ์…˜

๐ŸŸ ํ•ด์‹ฑ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ ์ ์ด ์žˆ๋Š” Hash!

ํ‚ค(Key) ๊ฐ’์„ ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)๋ผ๋Š” ์ˆ˜์‹์— ๋Œ€์ž…์‹œ์ผœ ๊ณ„์‚ฐํ•œ ํ›„ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”๋กœ ๊ฐ’(Value)์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•  ์ˆ˜ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ธ์ฆ์—์„œ์˜ ํ•ด์‹ฑ์ด๋ž€ ๊ฒฐ๊ตญ ์–ด๋–ค ๊ฐ’์— "์ž„์˜์˜ ์—ฐ์‚ฐ"์„ ์ ์šฉํ•ด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜, ์ฆ‰ ์•”ํ˜ธํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ›  ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐ–์ถฐ์•ผ ํ•  ์กฐ๊ฑด

1) ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•ด ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
2) ์ตœ๋Œ€ํ•œ ํ•ด์‹œ ๊ฐ’์„ ํ”ผํ•ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋“  ๊ฐ’์€ ๊ณ ์œ ํ•œ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
3) ์•„์ฃผ ์ž‘์€ ๋‹จ์œ„์˜ ๋ณ€๊ฒฝ์ด๋ผ๋„ ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

๐Ÿง‚ Salt

๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์‹ค ์™„๋ฒฝํ•œ ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์™„๋ฒฝํ•œ ์•”ํ˜ธํ™”๋ž€ ์—†๋‹ค. ๋ฌผ๋ก  ํ•ด์‹ฑํ•จ์ˆ˜๋Š” ์—ญํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ง€๋งŒ, ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•ด๋†“๊ณ  ์ถ”์ ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋ง‰์„ ์ˆ˜๋Š” ์—†๋‹ค. ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์„ ๋Œ€๋Ÿ‰์œผ๋กœ ์ €์žฅํ•ด๋†“์€ ํ‘œ์ธ ๋ ˆ์ธ๋ณด์šฐ ํ…Œ์ด๋ธ”์ด๋ž€ ๊ฒƒ๋„ ์กด์žฌํ•œ๋‹ค...!

๊ทธ๋ž˜์„œ! ์›๋ณธ๊ฐ’์— ์ž„์˜๋กœ ์•ฝ์†๋œ ๋ณ„๋„์˜ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ด ๊ธฐ์กด ํ•ด์‹œ ๊ฐ’๊ณผ ์ „ํ˜€ ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋…ธ์ถœ๋˜๋”๋ผ๋„ ์›๋ณธ๊ฐ’์„ ๋ณดํ˜ธํ•œ๋‹ค. ์ด ๋•Œ ์ถ”๊ฐ€ํ•˜๋Š” ๋ณ„๋„์˜ ๊ฐ’์„ salt๋ผ๊ณ  ํ•œ๋‹ค!

โ›”๏ธ Salt์— ๋Œ€ํ•ด ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ

salt๋Š” ์žฌ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ž„์˜์˜ salt๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด์‹ฑํ•ด์•ผ ํ•œ๋‹ค. ๋˜, salt๋Š” ๋‹น์—ฐํžˆ DB ์œ ์ € ํ…Œ์ด๋ธ”์— ๊ฐ™์ด ์ €์žฅํ•œ๋‹ค!

๐Ÿฅ  ์ฟ ํ‚ค

์ฒ˜์Œ์— ์ฟ ํ‚ค๋ฅผ ํ•™์Šตํ•  ๋•Œ, ์ธ์ฆ๊ณผ ์—ฎ์–ด์„œ ํ•™์Šตํ–ˆ์–ด์„œ ์ฟ ํ‚ค๋ฅผ ์„ธ์…˜, ํ† ํฐ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ธ์ฆ ๋ฐฉ์‹ ์ž์ฒด๋กœ ์ดํ•ดํ–ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์ฟ ํ‚ค๋Š” ์ธ์ฆ ๋ฐฉ์‹์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋‹ค๋งŒ ์ธ์ฆ ๊ณผ์ •์— ํ™œ์šฉ๋˜๋Š” ๊ฒƒ!

HTTP ์ฟ ํ‚ค(์›น ์ฟ ํ‚ค, ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค)๋Š” ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „์†กํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ทธ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ๋“ค์„ ์ €์žฅํ•ด ๋†“์•˜๋‹ค๊ฐ€, ๋™์ผํ•œ ์„œ๋ฒ„์— ์žฌ ์š”์ฒญ ์‹œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ฟ ํ‚ค๋Š” ๋‘ ์š”์ฒญ์ด ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋“ค์–ด์™”๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ์—†๋Š”(stateless) HTTP ํ”„๋กœํ† ์ฝœ์—์„œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ธฐ์–ต์‹œ์ผœ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ชจ์ชผ๋ก ์ฟ ํ‚ค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ๋˜ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค! (๋˜ํ•œ ์ฟ ํ‚ค๋Š” ๋”ฐ๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณ„์†ํ•ด์„œ ๋ณด์กด๋œ๋‹ค.) ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์•„๋ฌด ๋•Œ๋‚˜ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด๋“ค์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ๋“ค์ด ๋ฐ”๋กœ ์ฟ ํ‚ค์˜ต์…˜์ด๋‹ค!

๐Ÿซ ์ฟ ํ‚ค ์˜ต์…˜

// example
    cookie: {
      domain: 'localhost',
      path: '/',
      maxAge: 24 * 6 * 60 * 10000,
      sameSite: 'none',
      httpOnly: true,
      secure: true,
    },
  • Domain: ์ฟ ํ‚ค์˜ ๋„๋ฉ”์ธ ์˜ต์…˜๊ณผ ์„œ๋ฒ„์˜ ๋„๋ฉ”์ธ์ด ์ผ์น˜ํ•ด์•ผ๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Path: ์ฟ ํ‚ค์˜ path ์˜ต์…˜๊ณผ ์„œ๋ฒ„์˜ ์„ธ๋ถ€๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • MaxAge or Expires: ์ฟ ํ‚ค์˜ ์œ ํšจ๊ธฐ๊ฐ„ ์„ค์ •
  • HttpOnly: ์Šคํฌ๋ฆฝํŠธ์˜ ์ฟ ํ‚ค์ ‘๊ทผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒฐ์ •, false๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธํƒœ๊ทธ๋กœ ์ฟ ํ‚ค์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. (XSS ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋ฏ€๋กœ, ๋ฏผ๊ฐํ•œ ๊ฐœ์ธ์ •๋ณด๋Š” ๋‹ด์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.)
  • Secure: ํ•ด๋‹น ์˜ต์…˜์ด true๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, https ํ”„๋กœํ† ์ฝœ์—์„œ๋งŒ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅํ•˜๋‹ค.
  • SameSite: CORS ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ์˜ต์…˜ ๋ฐ ๋ฉ”์„œ๋“œ์— ๋”ฐ๋ผ ์ฟ ํ‚ค ์ „์†ก ์—ฌ๋ถ€ ๊ฒฐ์ •. (Lax-'GET' ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ, Strict-CrossOrigin์ด ์•„๋‹Œ sameSite์— ๋Œ€ํ•ด์„œ๋งŒ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ, None-ํ•ญ์ƒ ์ฟ ํ‚ค์ „์†ก ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ฟ ํ‚ค์˜ต์…˜์ค‘ secure ์˜ต์…˜์ด ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•จ)

์ฟ ํ‚ค๋ฅผ ์–ด๋””์— ํ™œ์šฉํ•  ๊ฒƒ์ด๋ƒ!

์„ธ์…˜ ๊ด€๋ฆฌ(Session management)

์„œ๋ฒ„์— ์ €์žฅํ•ด์•ผ ํ•  ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒŒ์ž„ ์Šค์ฝ”์–ด ๋“ฑ์˜ ์ •๋ณด ๊ด€๋ฆฌ

๊ฐœ์ธํ™”

์‚ฌ์šฉ์ž ์„ ํ˜ธ, ํ…Œ๋งˆ ๋“ฑ์˜ ์„ธํŒ…

ํŠธ๋ž˜ํ‚น

์‚ฌ์šฉ์ž ํ–‰๋™์„ ๊ธฐ๋กํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ์šฉ๋„

๐ŸŽŸ ์„ธ์…˜

์ฟ ํ‚ค๋Š” ์‚ฌ์‹ค ๊ทธ ์ž์ฒด๋กœ ์ธ์ฆ ์ˆ˜๋‹จ์€ ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜๋Š”๋ฐ ์ด๋Š” ๋ณด์•ˆ์— ๊ทธ๋ฆฌ ๊ฐ•๋ ฅํ•œ ์„ ํƒ์ด ์•„๋‹ˆ๋‹ค! ์ด์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค!

์ฟ ํ‚ค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์„œ๋ฒ„์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•œ๋‹ค! ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€์— ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜๊ณ  ๋Œ€์‹  ํด๋ผ์ด์–ธํŠธ์—๋Š” ์„ธ์…˜ id๋งŒ์„ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค! ๋ช…ํ™•ํžˆ ๋”ฐ์ง€๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์— ์„ฑ๊ณตํ•œ ์ƒํƒœ๊ฐ€ ์„ธ์…˜์— ํ•ด๋‹นํ•˜๊ณ , ์„ธ์…˜์ด ํ™œ์„ฑํ™”๋˜๋ฉด ์„ธ์…˜์•„์ด๋””๊ฐ€ ๋ฐœ๊ธ‰๋˜๊ณ , ์ด ์„ธ์…˜ ์„ฑ๊ณต์„ ์ฆ๋ช…ํ•  ์ˆ˜๋‹จ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜์•„์ด๋””๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฟ ํ‚ค์—๋Š” ์ด id๋งŒ ์ €์žฅ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค!

์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์–‘ํ•œ๋ฐ, 1) ์„œ๋ฒ„ ์ž์ฒด์— ์ €์žฅ์„ ํ•  ์ˆ˜๋„ ์žˆ๊ณ , 2) ํŒŒ์ผ๋กœ ์ €์žฅ์„ ํ•  ์ˆ˜๋„ ์žˆ๊ณ , 3) DB์— ์ €์žฅ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 1)์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ •๋ณด๋“ค์ด ๋ชจ๋‘ ์‚ฌ๋ผ์ง„๋‹ค๋Š” ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋ฉฐ, 2)์˜ ๊ฒฝ์šฐ ๋™์‹œ์  ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค!

Session์˜ ๊ธฐ๋ณธ ๋กœ์ง

ํด๋ผ์ด์–ธํŠธ๋Š” ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์š”์ฒญ ๋ฐ”๋””์— ๋‹ด์•„ ๋กœ๊ทธ์ธ ํฌ์ŠคํŠธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค

    axios
      .post(
        "https://localhost:4000/users/login",
        {
          userId: this.state.username,
          password: this.state.password,
        },
        {
          "Content-Type": "application/json",
          withCredentials: true,
        }
      )

์—ฌ๊ธฐ์„œ ์ž ๊น withCredentials์— ๋Œ€ํ•ด ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž! ๊ธฐ๋ณธ์ ์œผ๋กœ withCredentials๋Š” CORS ์˜ต์…˜์ด๋‹ค. ๊ฐ™์€ origin์—์„œ httpํ†ต์‹ ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ์•Œ์•„์„œ cookie๊ฐ€ request header์— ๋“ค์–ด๊ฐ„๋‹ค. ํ•˜์ง€๋งŒ origin์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์ˆ˜๋™์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ํ—ค๋”์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” withCredentials: true, ์„œ๋ฒ„์—์„œ๋Š” Access-Control-Allow-Credentials : true์ด๋‹ค!

๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ์„ธ์…˜์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค!

      req.session.save(function () {
        req.session.userId = userInfo.userId;
        res.json({ data: userInfo, message: "ok" });
      });

Session.save(callback)

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ์„ธ์…˜์„ ๋‹ค์‹œ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ณ , ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ด์šฉ์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ์„ธ์…˜์„ ์Šคํ† ์–ด์— ์ €์žฅํ•˜๊ณ  ๋‚˜๋ฉด callback์œผ๋กœ ๋„˜๊ฒจ์ค€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ์ง€ ์•Š์œผ๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ session store์— ์ €์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค redirect๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜์–ด ๋กœ๊ทธ์ธ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค!

์„œ๋ฒ„๋Š” ์ดํ›„์— ์š”์ฒญ์„ ๋ฐ›์„ ์‹œ session์„ ํ™•์ธํ•ด ์ธ์ฆ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

    if (!req.session.userId) {
      res.status(400).send({ data: null, message: "not authorized" });
    } else {
      const result = await Users.findOne({
        where: { userId: req.session.userId },
      }).catch((err) => res.json(err));

      res.status(200).json({ data: result, message: "ok" });
    }

์ฟ ํ‚ค์™€ ์„ธ์…˜, ์ „๊ฒฉ ๋น„๊ต!

  • ์ €์žฅ์€ ์–ด๋””์—? ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ, ์„ธ์…˜์€ ์„œ๋ฒ„
  • ์žฅ์ ์€? ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„์— ๋ถ€๋‹ด ์•ˆ ์คŒ, ์„ธ์…˜์€ ์‹ ๋ขฐํ•  ๋งŒํ•œ ์œ ์ €์ธ์ง€ ์„œ๋ฒ„์—์„œ ์ถ”๊ฐ€๋กœ ํ™•์ธ ๊ฐ€๋Šฅ! (๋” ์•ˆ์ „ํ•จ)
  • ๋‹จ์ ์€? ์ฟ ํ‚ค๋Š” ๊ทธ ์ž์ฒด๋กœ๋Š” ์ธ์ฆ์ด ์•„๋‹˜, ์„ธ์…˜์€ ๋ถ„์‚ฐ์— ๋ถˆ๋ฆฌํ•จ

์ฐธ๊ณ ๋ฌธ์„œ

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ