PaperAuthGate.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. 'use client';
  2. import Link from 'next/link';
  3. import { usePathname } from 'next/navigation';
  4. import type { ReactNode } from 'react';
  5. import useAuth from '@/hooks/useAuth';
  6. // 모의투자 인증 게이트 — 비로그인 시 자동 로그인 이동 대신 안내 + 버튼(이동은 사용자 결정).
  7. // 계좌/주문/포트폴리오 컴포넌트가 /api/paper/* 를 호출해 401→auth:unauthorized→자동 리다이렉트되는 것을,
  8. // 비로그인 시 자식을 아예 마운트하지 않음으로써 원천 차단한다.
  9. type Props = {
  10. children: ReactNode;
  11. };
  12. export default function PaperAuthGate({ children }: Props)
  13. {
  14. const { isAuthenticated } = useAuth();
  15. const pathname = usePathname();
  16. if (!isAuthenticated) {
  17. return (
  18. <div className='paper__empty-account' role='note'>
  19. <div className='paper__empty-account-title'>로그인이 필요한 기능이에요</div>
  20. <p className='paper__empty-account-desc'>
  21. 모의투자 계좌·주문·포트폴리오는 로그인 후 이용할 수 있어요.<br />
  22. 아래 버튼으로 로그인하면 이 페이지로 다시 돌아옵니다.
  23. </p>
  24. <Link href={`/login?returnUrl=${encodeURIComponent(pathname)}`} className='paper__btn paper__btn--primary'>
  25. 로그인하러 가기
  26. </Link>
  27. </div>
  28. );
  29. }
  30. return <>{children}</>;
  31. }