์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

approuter ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ์ ‘์† ๋ง‰๋Š”๋ฒ•

youngdeok 2023. 9. 3. 17:32

๋ฌธ์ œ์ :

์œ„์™€ ๊ฐ™์ด ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์Œ์—๋„ /home ๊ทธ๋Ÿฌ๋‹ˆ๊น ํ”ผ๋“œํŽ˜์ด์ง€(๋ฉ”์ธํŽ˜์ด์ง€)์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๋“ค์ˆจ๋‚ ์ˆจ ํ”„๋กœ์ ํŠธ๋Š” ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด localstorage์— ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋†“๊ณ  ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค(๋กœ๊ทธ์ธ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•˜์ง€ ์•Š๋„๋ก).

 

๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ๋งŒ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€์—๋„ ์ ‘์†์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

localstorage์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ๋‹ค๋Š” ๋œป์ž„์œผ๋กœ localstorage์—์„œ ๊ฐ’์„ ๋ฐ›์•„์˜จ ๋’ค ๊ฐ’์˜ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ ์„ฑํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const isAuthenticated = () => {
const token = localStorage.getItem('token');
return !!token;
};

const PrivateRoute = ({ element: Element }) => {
return isAuthenticated() ? <Element /> : <Navigate to="/login" />;
};

๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์—์„œ ๊ฐ’์„ ๋ฐ›์•„์˜จ๋’ค ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ์—๋Š” loginPage๋กœ ์ด๋™ํ•˜๋„๋ก ๋งŒ๋“  ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค.

 

<Route path="/home" element={<PrivateRoute element={<FeedPage />} />} />

์‚ฌ์šฉ์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.