Gorilla-Kim/Project

[MEMO APP] Back-end/ Session&Token-Register (2)

Kim_gorilla 2020. 3. 19. 22:45

 

๐Ÿ‘จ‍๐Ÿ’ป Session&Token (2)

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ์ €ํฌ๋Š” Json Web Token ์ด๋ผ๋Š” ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด์„œ ํ† ํฐ์„ ๋งŒ๋“ค๊ณ  ํ•ด์„ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด ํ•จ์ˆ˜๋“ค์„ ํšŒ์›๊ฐ€์ž… ์ ˆ์ฐจ์—์„œ ์‚ฌ์šฉ์„ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ Register fuction & Web Token

์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ์›ํ•˜๋Š”๊ฒƒ์€ ํšŒ์›๊ฐ€์ž…์ด ์ด๋ฃจ์–ด์กŒ์„๋•Œ ํ•ด๋‹น์œ ์ €์—๊ฒŒ token์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ธ๋ฐ์š”. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์ „์— ๋งŒ๋“ค์—ˆ๋˜ token์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” generateToken ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด auth.ctrl.js์—์„œ ๊ตฌํ˜„์„ ํ•ด์ค„์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์œ ์ €์—๋Œ€ํ•œ token์€ ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ๋„ ์ž์ฃผ ์‚ฌ์šฉ์ด๋  ์—ฌ์ง€๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ User.js ๋ชจ๋ธํŒŒ์ผ์—์„œ methodsํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ dbํด๋”์•ˆ์— User.js ํŒŒ์ผ์„ ์—ด์–ด์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  ์ƒ๋‹จ์— ์ œ์ผ๋จผ์ € ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  libํด๋”์•ˆ์— tokenํŒŒ์ผ๊ณผ ํ† ํฐ์„ ์ƒ์„ฑํ• ๋•Œ(ํ† ํฐ์„ ํ•ด์‰ฌํ™”ํ• ๋•Œ) ์‚ฌ์šฉํ•  ๋ฌธ์ž์—ด์„ .env์—์„œ ๊ฐ€์ ธ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งจ ํ•˜๋‹จ์— ํŠน์ • ์œ ์ €์ •๋ณด(payload)๋ฅผ ๋‹ด์€ ํ† ํฐ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค„๊ฒ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ „ ํฌ์ŠคํŒ…์—์„œ DB์•ˆ์— ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ• ๋•Œ(ํŠน์ • ์ด๋ฉ”์ผ์˜ ์œ ์ € ์ฐพ๊ธฐ๋“ฑ..) statics๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ์š”.

์ด๋•Œ statics๋Š” DB์ž์ฒด์—๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด method๋Š” ํŠน์ • ์œ ์ €๋ฐ์ดํ„ฐ์—๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” method๋ฅผ ์ด์šฉํ•ด์„œ ์•„๋ž˜์™€๊ฐ™์ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค„๊ฒŒ์š”.

(์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ๋งŒ๋“ค์—ˆ๋˜ token.js์˜ generateTokenํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ 'user'๋ผ๋Š” subject๋ฅผ ๊ฐ€์ง„ ํ† ํฐ์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.)

์ด์ œ ์šฐ๋ฆฌ๋Š” auth.ctrl.js์—์„œ ํŠน์ • User๊ฐ์ฒด์˜ generateTokenํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ํ† ํฐ์„ ๋งŒ๋“ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž ๊ทธ๋Ÿผ auth.ctrl.js์„ ์ˆ˜์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ๋งŒ๋“ค์—ˆ๋˜ localRegister ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ™•์ธํ• ๊ฒŒ์š”.

 

์šฐ๋ฆฌ๋Š” ์•„๋ž˜์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํ˜•์‹๋Œ€๋กœ ์ž˜ ์™”๋Š”์ง€ Joi๋ผ๋Š” ๋ชจ๋“ˆ๋กœ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ž˜๋ชป๋“ค์–ด์™”๋‹ค๋ฉด Error๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์ž˜ ๋“ค์–ด์™”๋‹ค๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด์ค€ ๋ฐ์ดํ„ฐ๋ฅผ DB์— ์ €์žฅํ•˜๊ธฐ์œ„ํ•ด์„œ Try Catch๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๊ทธ ์•ˆ์—์„œ ์ž‘์—…์„ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋˜๋Œ€๋กœ ์ƒˆ๋กœ์šด ์œ ์ €์˜์ •๋ณด๊ฐ€ DB์— ์ €์žฅ๋˜๋Š” ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์•ฝ๊ฐ„ ์•„์‰ฌ์› ๋˜์ ์ด ํšŒ์›๊ฐ€์ž…๊ณผ ๋™์‹œ์— ๋กœ๊ทธ์ธ์ด ์•ˆ๋˜์–ด์ง€๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ์š”, ์˜ค๋Š˜ ๊ทธ๋ถ€๋ถ„์„ ๋ฐฉ๊ธˆ User.js์—์„œ ๋งŒ๋“  generateToken์„ ์ด์šฉํ•ด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์œ„์˜ ์‚ฌ์ง„์—์„œ 47๋ฒˆ์งธ์ค„ ์•„๋ž˜์— ํ† ํฐ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜

์‚ฌ์ง„์„ ๋”ฐ๋ผ ์ž‘์—…ํ•ด์ฃผ์„ธ์š”.

(ํ•˜์ด๋ผ์ดํŠธํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.)

์ด์ „์— DB์— ์ €์žฅ์„ ํ•˜๋ฉด์„œ ๋งŒ๋“ค์–ด์กŒ๋˜ user๊ฐ์ฒด์— ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ๋งŒ๋“  generateToken์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ์–ด๋– ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ user๊ฐ์ฒด์•ˆ์—์žˆ๋Š” display, email ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ ๊ทธ ์ •๋ณด๋ฅผ payload๋กœ ์ด์šฉํ•ด token์„ ์•Œ์•„์„œ ์ƒ์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด์ •๋ณด๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„์„œ ๋‹ค์‹œ ์š”์ฒญํ–ˆ๋˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.

์ด๋•Œ ์ฟ ํ‚ค์˜ ํ™œ์„ฑ์‹œ๊ฐ„์€ 7์ผ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š”๋ฐ ์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜๋Š” ๋‹จ์œ„๋Š” ms๋‹จ์œ„ ๊ณ„์‚ฐ์ž„์œผ๋กœ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ๊ฐ™์ด ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ๊นŒ์ง€ ํ•ด์ฃผ์…จ๋‹ค๋ฉด ํšŒ์›๊ฐ€์ž…๊ณผ ๋™์‹œ์— ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ์•ˆ์— ํ† ํฐ์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

 

์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œ์ผœ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

postman์„ ์ด์šฉํ•ด ์•„๋ž˜์˜ ๋ฐ์ดํ„ฐ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค๋ฉด, postman ํ•˜๋‹จ์— cookie์•ˆ์— ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ token์ด ์กด์žฌํ•˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด token์•ˆ์˜ ์ •๋ณด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ์„œ https://jwt.io/ ์‚ฌ์ดํŠธ๋กœ ๋“ค์–ด๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘์„ฑ์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ขŒ์ธก์— ๋ณต์‚ฌํ•œ๊ฒƒ์„ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•ด์ฃผ๋ฉด ์šฐ์ธก์— HEADER, PAYLOAD, SIGNATURE ์˜์—ญ๋ณ„ ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ฆ‰ PAYLOAD๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ token์„ ๋งŒ๋“ค๋•Œ ๋„ฃ์—ˆ๋˜ ์ •๋ณด๋“ค์„ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ํšŒ์›๊ฐ€์ž…์ด ์ด๋ฃจ์–ด์กŒ์„๋•Œ ๋กœ๊ทธ์ธ์ด ์œ ์ง€๋˜๊ธฐ์œ„ํ•ด token์„ ์œ ์ €์—๊ฒŒ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ๊ตฌํ˜„ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ์€ auth.ctrl.js ์•ˆ์— loginLocal ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.