Gorilla-Kim/Project

[MEMO APP] Back-end/ REST API+Session&Token-Login

Kim_gorilla 2020. 3. 20. 13:25

 

๐Ÿ‘จ‍๐Ÿ’ป REST API-Login

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ์ €ํฌ๋Š” RegisterLocal ๊ธฐ๋Šฅ์„ ์™„์„ฑ์‹œ์ผœ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํšŒ์›๊ฐ€์ž…๋œ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” Controller method๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ Login Controller method

Login ๊ด€๋ จ ๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ๋Š” authentication๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ auth.ctrl.js์—์„œ ์ž‘์—…์„ ํ•ด์ค„๊ฒ๋‹ˆ๋‹ค. ์ผ๋‹จ ํ•ด๋‹น ํŒŒ์ผ์„ ์—ด์–ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์‚ฌ์ง„์— ํ•˜์ด๋ผ์ดํŠธ ๋ถ€๋ถ„์„ ์ง€๊ธˆ๋ถ€ํ„ฐ ์ž‘์—…ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ผ๋‹จ, ๋กœ๊ทธ์ธ์—์„œ๋„ ์œ ์ €(=ํด๋ผ์ด์–ธํŠธ)๋กœ๋ถ€ํ„ฐ ๋ณด๋‚ด์ง„ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„๊ฒ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ์ด๋‹ˆ๊น email, password์ •๋„๊ฐ€ ๋˜๊ฒ ๋„ค์š”.

 

์ด ๋ณด๋‚ด์ง„ email๊ณผ password๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํ˜•์‹์ธ์ง€ ๊ฒ€์ฆํ•ด์ฃผ๋Š” ์ ˆ์ฐจ๋ฅผ ํšŒ์›๊ฐ€์ž…๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง„ํ–‰ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(๋‹ค์‹œํ•œ๋ฒˆ Joi๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋„ค์š”.)

๊ฒ€์ฆ์ด ์‹คํŒจํ–ˆ์„๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋„๋ก ์„ค์ •์„ ํ•ด์ฃผ๋Š” ์†Œ์Šค๋„ ์ถ”๊ฐ€ํ•ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์—” ๊ฒ€์ฆ๋œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ด์ •๋ณด(email, password)๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ๋„ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ• ๊ฒŒ์š”.

 

์ผ๋‹จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ด€๋ จํ•œ ์ž‘์—…์ž„์œผ๋กœ try catch ๋ธ”๋ก์•ˆ์—์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ• ๊ฒŒ์š”.

์ด์ „์— ์šฐ๋ฆฌ๊ฐ€ User.js์—์„œ ๋งŒ๋“ค์—ˆ๋˜ email์„ ๊ฐ€์ง€๊ณ  DB์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” findByEmailํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

User.js์—์„œ findByEmail ๋ฉ”์„œ๋“œ
auth.ctrl.js์—์„œ loginlocal ๋ฉ”์„œ๋“œ

์œ„์˜ ๊ทธ๋ฆผ์—์„œ 86๋ฒˆ์งธ์ค„์ฒ˜๋Ÿผ ์ฐพ์•„์„œ ๊ฐ€์ ธ์˜จ ์œ ์ €์˜ ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ ๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์ผ์ข…์˜ ์กฐ๊ฑด๋ฌธ์„ ๋งŒ๋“ค์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

(์—ฌ๊ธฐ์„œ ์ตœ์ข…์ ์œผ๋กœ ํ•ด๋‹น email์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์œ ์ €๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.)

์ด๋ถ€๋ถ„์„ ์ž˜ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด, ์šฐ๋ฆฌ๊ฐ€ email์ •๋ณด๋ง๊ณ  ๋ฐ›์€ ๋˜๋‹ค๋ฅธ ์ •๋ณด์ธ password๊ฐ€ ํ•ด๋‹น ์œ ์ €DB data์˜ ์ •๋ณด์™€ ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(์—ฌ๊ธฐ์„œ Password์ผ์น˜์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.)

 

์ด๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” User Database์— ์ ‘๊ทผํ•ด์•ผํ•˜๋Š”๋ฐ์š”, ๊ทธ๋ž˜์„œ User.js์— User์˜ password ์ •๋ณด์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์ฆ์‹œ์ผœ์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ํ•จ์ˆ˜๋ฅผ auth.ctrl.js์—์„œ ์‚ฌ์šฉํ•ด์„œ password๊ฒ€์ฆ์ ˆ์ฐจ๊นŒ์ง€ ์™„์„ฑํ•ด ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ auth.ctrl.js ํŒŒ์ผ์„ ์—ด์–ด์ฃผ์„ธ์š”.

(email์„ ๊ฐ€์ง€๊ณ  ์œ ์ €์ •๋ณด ๊ฒ€์ฆํ–ˆ๋˜ ์กฐ๊ฑด๋ฌธ์ฒ˜๋Ÿผ password ๊ฒ€์ฆ๋„ ๋น„์Šทํ•˜๊ฒŒ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด์ค๋‹ˆ๋‹ค.)

์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด์ฃผ์…จ๋‹ค๋ฉด ์œ ์ €๊ฐ€ ๋ณด๋‚ธ์ค€์ •๋ณด๊ฐ€ DB์— ์กด์žฌํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒ€์ฆํ•˜๋Š” ์ ˆ์ฐจ๋Š” ์™„๋ฃŒ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ํ•œ๋‹ค๋ฉด ๋กœ๊ทธ์ธ์ด ์ง€์†์ ์œผ๋กœ ์œ ์ง€๊ฐ€ ๋˜์–ด์ง€์ง€ ์•Š์„๊ฒ๋‹ˆ๋‹ค.

ํšŒ์›๊ฐ€์ž…์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Web Token์„ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธ์„ ์œ ์ง€์‹œ์ผœ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ์š”, ๊ทธ ์ ˆ์ฐจ๋ฅผ ์ง€๊ธˆ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋กœ๊ทธ์ธ์ •๋ณด๋ฅผ ๋‹ด์€ ๋ฐ์ดํ„ฐ(Token)์ด ๋‹ด๊ธด ์„ธ์…˜์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

(ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์ด๋ฅผ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ์„ ์œ ์ง€์‹œ์ผœ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

 

์œ„ ์‚ฌ์ง„์—์„œ ์•„๋ž˜์— catch ๋ธ”๋ก ์œ„์˜ ๋‚ด์šฉ์€ ์ถ”ํ›„ ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด ๋ณด๋‚ด์ฃผ๋Š” ์ •๋ณด์ž„์œผ๋กœ ์•„์ง ์ž‘์„ฑ์„ ์•ˆํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‚˜ ์‘๋‹ต๋ฉ”์‹œ์ง€๋ฅผ ๋”ฐ๋กœ ์ง€์ •์„ ํ•ด์ค˜์•ผ ํ•จ์œผ๋กœ ๋”ฐ๋ผ์„œ ์ž‘์„ฑํ•ด์ฃผ์…”๋„ ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

(์•„๋ž˜ ์‚ฌ์ง„์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.)

์—ฌ๊ธฐ์„œ ๋๋‚˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  loginLocal method๋ฅผ ์šฐ๋ฆฌ์˜ ํŠน์ • URI์— ์—ฐ๊ฒฐ์„ ํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ auth/inde.js ํŒŒ์ผ๋กœ ์ด๋™์„ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„์— ํ•˜์ด๋ผ์ดํŠธํ•œ ๋ถ€๋ถ„์ด ์šฐ๋ฆฌ๊ฐ€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ Login์„ ์œ„ํ•œ URI์ž…๋‹ˆ๋‹ค.

๋’ค์— ์žˆ๋Š” Arrow function์ด ๋ฐฉ๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ loginLocal ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์œ„์— ์žˆ๋Š” ํšŒ์›๊ฐ€์ž… URI์ฝ”๋“œ์ฒ˜๋Ÿผ ์ˆ˜์ •์„ ํ•ด์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ํ•ด๋‹น๊ฒฝ๋กœ๋กœ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜๋Š”๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

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

(ํ…Œ์ŠคํŠธ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜์™€๊ฐ™์ด ํšŒ์›๊ฐ€์ž…๋•Œ ์‚ฌ์šฉํ•œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

์•„๋ž˜์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ PostMan ํ•˜๋‹จ์—์„œ ๊ทธ๊ฒฐ๊ณผ๋กœ Cookie ์•ˆ์— accsee_token์ด ์ƒ์„ฑ๋œ๊ฒƒ์„ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

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

 

์˜ค๋Š˜ ํฌ์ŠคํŒ…์€ ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค. ์ €ํฌ๋Š” REST API๊ธฐ๋ฐ˜ ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ๊ธˆ ๊ธฐ๋‚˜๊ธด ๋‚ด์šฉ์ด์—ˆ๋Š”๋ฐ์š”, ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ•œํ…œํฌ ์‰ฌ์–ด๊ฐ€๋Š” ์‹œ๊ฐ„์œผ๋กœ ์ €ํฌ๊ฐ€ ๋งŒ๋“œ๋Š” ์„œ๋น„์Šค์˜ ์†๋„๋‚˜ ํšจ์œจ์ ์ธ ์ธก๋ฉด์„ ์ƒ์Šน์‹œ์ผœ์ค„ ๋ฏธ๋“ค์›จ์–ด ๋ช‡๊ฐœ๋ฅผ ์„ค์ •ํ•ด ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋ต๊ฒŒ์š”~!๐Ÿ˜‰