๋๋์ด, ๊ธฐ๋ฅ ๊ตฌํ์ ๋ง์ง๋ง ๋จ๊ณ!
๋ก๊ทธ์ธ์ ํ์ง ์์ผ๋ฉด ์ด๋ค ๋๋ฉ์ธ์ ์ ๊ทผํด๋ ๋ฐ๋์ ๋ก๊ทธ์ธ ํ์ด์ง๊ฐ ๋ํ๋๊ฒ ๋ง๋ ๋ค.
๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ ProtectedRoute
์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ๋๋ฉ์ธ ์ด๋์ ๋ง์์ผ ํ๋ ํ์ด์ง๋ค์๊ฒ ์ด ์ปดํฌ๋ํธ๋ฅผ ์์ฐ๋ ๋ฐฉ์๊ธ๋ก ๊ฐ๋จํ ๊ตฌํํ ์ ์์๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ ์๊ฐ์ธ๋ก ์ฝ๊ฒ ํ๋ฆฌ์ง ์์๋ค.
๋ฉ๋ด ๋งํฌ๋ฅผ ํตํด์ ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ์๋ฌด ๋ฌธ์ ๊ฐ ์์๋๋ฐ, ์ฃผ์์ฐฝ์ url์ ์ง์ ์ ๋ ฅํ ๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค.
url์ ์ง์ ์ ๋ ฅํ๋ฉด ๋ถ๋ช ๋ก๊ทธ์ธ์ ํ ์ํ์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ๋ ๊ฒ์ด๋ค.
์์ด๋ฐ๊ฐ ์ถ์ด์ ์ฝ์๋ก user๊ฐ์ ์ถ๋ ฅํด๋ณด์๋๋ url์ ํตํด ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ์ฒ์์ user์ ๋ณด๊ฐ undefined
๋ก ๋จ๊ณ ๊ทธ ํ ์ ๋ณด๊ฐ ๋ฐ์๋์๋ค. url๋ก ํ์ด์ง๋ฅผ ์ด๋ํ๋ฉด ์๋ก๊ณ ์นจ์ด ๋๋ฉด์ user์ ๋ณด๋ฅผ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์์ค์ง ๋ชปํ๊ณ ๋๋ ์ด๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ธ ๊ฒ ๊ฐ์๋ค.
์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ฉด ์ข์์ง ๊ณ ๋ฏผ์ํ๋ค๊ฐ ๋ก๊ทธ์ธ์ ์ํด์ user์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ์๋ null
๋ก ๋ฌ๋ค๋๊ฑธ ์์๊ณ , if๋ฌธ์ ํตํด user===null
์ผ๋๋ง ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋๋๋๋ก ์ฒ๋ฆฌํด์ฃผ์๋ค.
์ง๊ธ์ ์ด๋ ๊ฒ ๋์์ง๋ง ์ดํ react-query ๋ฑ์ ์ด์ฉํ ์บ์ฑ ์์ ์ผ๋ก if๋ฌธ์ ์์จ๋ ๋๋๋ก ํด๊ฒฐํ ์ ์์ง ์์๊น ์ถ๋ค.
const router = createBrowserRouter([
{
path: "/",
element: <App />,
errorElement: <NotFound />,
children: [
{
index: true,
element: (
// ProtectedRoute์ปดํฌ๋ํธ๋ฅผ ์์์ค๋ค
<ProtectedRoute>
<Home />
</ProtectedRoute>
),
},
{
path: "search",
element: (
<ProtectedRoute>
<Search />
</ProtectedRoute>
),
},
{
path: "community",
element: (
<ProtectedRoute>
<Community />
</ProtectedRoute>
),
},
{
path: "my_pick",
element: (
<ProtectedRoute>
<Pick />
</ProtectedRoute>
),
},
{ path: "sign_in", element: <SignIn /> },
{ path: "sign_up", element: <SignUp /> },
],
},
]);
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<AuthProvider>
<Provider store={store}>
<RouterProvider router={router}>
<App />
</RouterProvider>
</Provider>
</AuthProvider>
);
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
import { useAuthContext } from "../store/auth/AuthContext";
export default function ProtectedRoute({ children }) {
const { user } = useAuthContext();
const navigate = useNavigate();
useEffect(() => {
if (user === null) {
navigate("/sign_in");
}
}, [user]);
return children;
}
+) ๋ก๊ทธ์ธํ์ ๋ /
๊ฒฝ๋ก๋ก ์ด๋๋์ง ์๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ค. ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ ์ ๊ฐ ์ฒ์ ๋ง๋๊ฒ ๋๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๊ฐ์ฅ ๋จผ์ ์์ ํด์ผ ํ ๊ฒ ๊ฐ๋ค.