[MEMO APP] Back-end/ Session&Token-Register (2)
๐จ๐ป 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 ๊ธฐ๋ฅ์ ๊ตฌํํด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.