프로그래머가 되는 꿈
4. 쇼핑몰 웹사이트 만들기 (17) 본문
<알고리즘 단계>
//1. 전체 상품 페이지, 로그인 페이지, 상품상세 페이지 - 3개의 페이지 (가 필요) -완료-
//1-1. 네비게이션 바 (만들기.생성) !!! -완료-
//2. 전체 상품 페이지에서는 전체 상품을 볼 수 있다. -완료-
//3. 로그인 버튼을 누르면 로그인 페이지가 나온다. -완료- (앞)
//4. 상품 디테일을 눌렀으나, 로그인이 안되어있을 경우에는 로그인 페이지가 먼저 나온다.
//5. 로그인이 되어있을 경우에는, 상품 디테일(상세) 페이지를 볼 수 있다.
//6. 로그아웃 버튼을 클릭하면 로그아웃이 된다.
//7. 로그아웃이 되면 상품 디테일(상세) 페이지를 볼 수 없고 다시 로그인 페이지가 보인다.
//8. 로그인을 하면 로그아웃이 보이고 로그아웃을 하면 로그인이 보인다.(상단 오른쪽)
//9. 상품을 검색할 수 있다.
<//4. 상품 디테일을 눌렀으나, 로그인이 안되어있을 경우에는 로그인 페이지가 먼저 나온다.>
상품 디테일 페이지는 아무에게나 보이면 안된다. 로그인한 사용자만 볼 수 있다.
따라서 상품 디테일 페이지는 protect, 즉 보호해야한다.
우리가 보호해줘야 하는것 : 상품 디테일 페이지
로그인 여부에 따라 상품 디테일 페이지가 보인다 아님 안보인다로 되어있다.

지금은 그냥 route안에 들어가 있다.
그러나 ProductDetail은 보호받아야 한다.
그래서 PrivateRoute를 따로 만들어 보자!

조건부를 return해줄 것이다.
<조건>
authenticate가 true이냐 false이냐에 따라서...
true이면 상품 디테일 페이지 보여주고, false이면 로그인페이지로 리다이렉트(빠꾸)!

일단 authenticate라는 정보를 PrivateRoute에서 읽어줄 수 있어야 한다.
그래야 true인지 false인지 알 수 있다!
PrivateRoute는 authenticate를 props로 들고간다.
자동으로 PrivateRoute가 import 된다.

authenticate라는 정보를 {}props로 들고온다.
냅다 <div></div>를 보여주는게 아니라... 여기서 조건을 제시한다.
여기서 질문을 하자면...
authenticate가 true이면 망설임없이 ProductDetail 페이지를 보여준다.
만약에 false이면 로그인을 안한 사용자이다. 그러면 로그인 페이지로 가서 로그인을 해줘야겠지?
"redirect : 경로를 튕겨주세요"
redirect를 할 수 있는 컴포넌트 = Navigate
Navigate to="/login"/ == 로그인 페이지로. 방향을 꺾어주세요.
Navigate를 import 시킨다.
<정리>
따로 PrivateRoute를 만들어줬을 뿐! 차이는 없다~
앱 안(App.js)에서 만드든지 아님 따로 PrivateRoute(js)를 만들었든지 상관 no!
product/:id 로 가고싶을때에 우리는 냅다 ProductDetail을 보여주는 것이 아니라 PrivateRoute를 호출한다.


<결과>
상품 카드를 클릭하면 아무런 반응이 안나온다.
'프론트엔드 (Front-end) > React 프로젝트' 카테고리의 다른 글
| 4. 쇼핑몰 웹사이트 만들기 (19) (0) | 2026.01.29 |
|---|---|
| 4. 쇼핑몰 웹사이트 만들기 (18) (0) | 2026.01.29 |
| 4. 쇼핑몰 웹사이트 만들기 (16) (0) | 2026.01.29 |
| 4. 쇼핑몰 웹사이트 만들기 (15) (0) | 2026.01.29 |
| 4. 쇼핑몰 웹사이트 만들기 (14) (0) | 2026.01.29 |