| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import './style.scss';
- import Link from 'next/link';
- import { isSocialLoginProvider, SOCIAL_PROVIDER_LABELS } from '@/constants/social';
- /**
- * 소셜 로그인 안내 화면 — /login/social-notice?reason=...&provider=...
- *
- * - email-required: 카카오 이메일 선택동의 미동의 (Auth.EmailRequired) → 재동의 유도
- * - account-exists: 같은 이메일의 기존 계정 존재 (Auth.AccountExists) → 기존 계정 로그인 + SNS 연동 안내
- */
- export default async function Page({ searchParams }: { searchParams: Promise<{ reason?: string; provider?: string }> })
- {
- const { reason, provider } = await searchParams;
- const label = isSocialLoginProvider(provider) ? SOCIAL_PROVIDER_LABELS[provider] : '소셜';
- if (reason === 'email-required') {
- return (
- <div className="social-notice">
- <h1 className="social-notice__title">이메일 제공 동의가 필요합니다</h1>
- <p className="social-notice__desc">
- {label} 계정으로 가입하려면 이메일 제공에 동의해야 합니다.<br />
- 다시 로그인하면서 <strong>이메일</strong> 항목에 동의해주세요.
- </p>
- {provider === 'kakao' && (
- <p className="social-notice__hint">
- 동의 항목이 보이지 않는다면 카카오 <strong>내 계정 > 연결된 서비스 관리</strong> 에서
- 개미투자 연결을 해제한 뒤 다시 시도해주세요.
- </p>
- )}
- <div className="social-notice__actions">
- {isSocialLoginProvider(provider) && (
- <a href={`/login/${provider}/start`} className="social-notice__button social-notice__button--primary">
- {label} 로그인 다시 시도
- </a>
- )}
- <Link href="/login" className="social-notice__button">
- 로그인으로 돌아가기
- </Link>
- </div>
- </div>
- );
- }
- if (reason === 'account-exists') {
- return (
- <div className="social-notice">
- <h1 className="social-notice__title">이미 가입된 이메일입니다</h1>
- <p className="social-notice__desc">
- {label} 계정과 같은 이메일로 가입된 계정이 이미 있습니다.<br />
- 안전을 위해 자동으로 연결하지 않아요.
- </p>
- <p className="social-notice__hint">
- 기존 계정으로 로그인한 뒤 <strong>계정 관리 > SNS 연결 관리</strong> 에서 {label} 계정을 연동하면,
- 다음부터 {label} 로그인을 사용할 수 있습니다.
- </p>
- <div className="social-notice__actions">
- <Link href="/login" className="social-notice__button social-notice__button--primary">
- 기존 계정으로 로그인
- </Link>
- </div>
- </div>
- );
- }
- return (
- <div className="social-notice">
- <h1 className="social-notice__title">로그인을 완료할 수 없습니다</h1>
- <p className="social-notice__desc">
- {label} 로그인 처리 중 문제가 발생했습니다. 잠시 후 다시 시도해주세요.
- </p>
- <div className="social-notice__actions">
- <Link href="/login" className="social-notice__button social-notice__button--primary">
- 로그인으로 돌아가기
- </Link>
- </div>
- </div>
- );
- }
|