Auth๋ ์ธ์ฆ(Authentication), ๊ถํ๋ถ์ฌ(Authorization) ๋ฑ์ ์ค์๋ง๋ก ์ธ์ฆ(authentication)์ ์์ ์ด ๋๊ตฌ๋ผ๊ณ ์ฃผ์ฅํ๋ ์ฌ๋์ ํ์ธํ๋ ์ ์ฐจ์ด๋ฉฐ ๊ถํ๋ถ์ฌ(authorization)๋ ๊ฐ๊ณ ์ถ์ ๊ณณ์ผ๋ก ๊ฐ๋๋ก ํน์ ์ํ๋ ์ ๋ณด๋ฅผ ์ป๋๋ก ํ์ฉํ๋ ๊ณผ์ ์ด๋ค.
์ฆ, Auth Route๋ ์ฝ๊ฒ ๋งํด ์ธ์ฆ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
ํ์ด์ง๋ง๋ค ๋ก๊ทธ์ธ์ด ๋์ด์๋์ง ์๋์ด์๋์ง ํ์ธํ๊ณ , ํ์ด์ง์ ๊ถํ์ด ์๋ ๊ด๋ฆฌ์ ์ ์ ์ธ์ง ๋ฑ์ ์ฒดํฌํ๊ธฐ ์ํด
ํ ํฐ์ ๋ง๋ค๋ฉด์ Client์๋ Cookie, Server์๋ DB์ ์ ์ฅ์ ํด์คฌ๋ค.
๊ทธ๋์ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์๋ ๋๊ฐ์ง ํ ํฐ์ด ์ผ์นํ๋๊ฐ๋ฅผ ๊ณ์์ ์ผ๋ก ์ฒดํฌํด์ ์ธ์ฆ ๊ถํ์ ํ์ธํด์ค๋ค.
์๋ฅผ๋ค์ด Aํ์ด์ง์์ Bํ์ด์ง๋ก ๋์ด๊ฐ ๋,
User๊ฐ Bํ์ด์ง์๋ ๊ถํ์ด ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด
Client์์ Server๋ก ์ฟ ํค์ ๋ด๊ฒจ์ ธ ์๋ Token์ ์ ๋ฌํ๋ค.
Client์์ Server๋ก ๋์ด๊ฐ๋ ํ ํฐ์ ์ฟ ํค์์ encode ๋์ด์๊ธฐ ๋๋ฌธ์ JWT๋ก ๋์ฝ๋ํด์ ๋์จ User ID๋ฅผ ์๋ฒ์ ๋๊ฒจ์ฃผ๊ฒ ๋๋ค.
๊ทธ UserID๋ฅผ ๊ฐ์ง User ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Token์ด ์๋ค๋ฉด ์ผ์น, Token์ด ์๋ค๋ฉด ์ ๊ทผํ ์ ์๊ฒ ๋ง๋ค์ด์ค๋ค.
1๏ธโฃ Cookie์์ ์ ์ฅ๋ Token์ Server์์ ๊ฐ์ ธ์์ ๋ณตํธํ๋ฅผ ํ๋ค.
2๏ธโฃ ๋ณตํธํ๋ฅผ ํ๋ฉด UserID๊ฐ ๋์ค๋๋ฐ ๊ทธ User ID๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค User Collection์ ์๋์ง ํ์ธํ๋ค.
3๏ธโฃ ์ ์ ๋ฅผ ์ฐพ์ ํ ์ฟ ํค์์ ๋ฐ์์จ Token์ ์ ์ ๋ ๊ฐ๊ณ ์๋์ง ํ์ธํ๋ค.
app.get('/api/users/auth', auth , (req, res) => {})
'์๋ํฌ์ธํธ' ๊ทธ๋ฆฌ๊ณ (req, res) ์ค๊ฐ์ auth
๋ฏธ๋์จ์ด๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
โ๏ธ ๋ฏธ๋์จ์ด๋?
์๋ํฌ์ธํธ์์ ๋ฆฌํ์คํธ๋ฅผ ๋ฐ์ ํ, ์ฝ๋ฐฑํจ์๋ฅผ ์คํํ๊ธฐ ์ ์ ์ค๊ฐ์์ ๋จผ์ ์คํ๋๋ ๊ฒ.
middleware
ํด๋์ auth.js
ํ์ผ ๋ง๋ค๊ธฐauth.js
ํ์ผ ์์ ์ธ์ฆ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐlet auth =(req, res, next) => {
// ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ณณ
// 1. Client Cookie์์ Token์ ๊ฐ์ ธ์จ๋ค.
// 2. Token์ ๋ณตํธํ ํ ํ ์ ์ ๋ฅผ ์ฐพ๋๋ค.
// 3. ์ ์ ๊ฐ ์์ผ๋ฉด ์ธ์ฆ Okay
// 4. ์ ์ ๊ฐ ์์ผ๋ฉด ์ธ์ฆ No!
}
module.exports = { auth };
โ๏ธ let token = req.cookie.x_auth
๋ถ๋ถ์ Login Route์์ cookie์ ์ ์ฅํด์ค x_auth
๋ฅผ ๊ฐ์ ธ์จ๊ฒ.
โ๏ธ ๊ฐ์ ธ์จ Token์ผ๋ก User๋ฅผ ์ฐพ๊ธฐ ์ํด User๋ชจ๋ธ์ findByToken ํจ์ ์์ฑํ๊ธฐ
โ๏ธ ๋ฏธ๋์จ์ด ํ์ผ ์ฝ๋ ์์ฑํ๊ธฐ
โ๏ธ isAdmin ์ฝ๋๋ User๋ชจ๋ธ์ role 0์ ์ผ๋ฐ์ ์ ๋ก, ์ง์ ํ๊ธฐ๋๋ฌธ์ 0์ด ์๋๋ฉด ๊ด๋ฆฌ์์ด๋ค.
์๋ฅผ๋ค์ด role1 = admin์ด๊ณ role2 = ํน์ ๋ถ์ admin์ด๋ผ๋ฉด ์ค์ ํ๊ฑฐ์ ๋ฐ๋ผ isAdmin ์ฝ๋๊ฐ ๋ฌ๋ผ ์ง ์ ์๋ค.