page.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. 'use client';
  2. import './style.scss';
  3. import Link from 'next/link';
  4. import { useSearchParams } from 'next/navigation';
  5. import { useState, useEffect } from 'react';
  6. import { fetchApi } from '@/lib/utils/client';
  7. import Loading from '@/app/component/Loading';
  8. export default function VerifyEmail()
  9. {
  10. const searchParams = useSearchParams();
  11. const [error, setError] = useState<string>('');
  12. const [loading, setLoading] = useState<boolean>(true);
  13. const [isComplete, setComplete] = useState<boolean>(false);
  14. const [token] = useState(searchParams.get('token'));
  15. useEffect(() => {
  16. if (error) {
  17. alert(error);
  18. setError('');
  19. }
  20. }, [error]);
  21. useEffect(() => {
  22. if (!token) {
  23. setError('잘못된 접근입니다.');
  24. setLoading(false);
  25. setComplete(false);
  26. return;
  27. }
  28. fetchApi(`/api/mypage/email/verify?token=${encodeURIComponent(token)}`).then(() => {
  29. localStorage.removeItem('member');
  30. setComplete(true);
  31. }).catch(err => {
  32. setError(err.message);
  33. }).finally(() => {
  34. setLoading(false);
  35. });
  36. }, [token]);
  37. if (loading) {
  38. return <Loading />;
  39. }
  40. return (
  41. <>
  42. <div id="verifyEmail">
  43. {isComplete ?
  44. <>
  45. <h1>이메일 변경이 완료되었습니다.</h1>
  46. <blockquote>
  47. <strong>이메일 인증이 확인되었습니다.</strong><br />
  48. 다시 로그인 후 변경된 이메일로 서비스 이용이 가능합니다.<br />
  49. </blockquote>
  50. <br />
  51. <Link href="/login" className="btn btn-default">로그인</Link>
  52. </>
  53. :
  54. <>
  55. <h1>이메일 변경이 거부되었습니다.</h1>
  56. <blockquote>
  57. 인증 시간이 만료되었거나, 이미 인증되었을 수 있습니다.<br />
  58. 처음부터 다시 시도해 주십시오.
  59. </blockquote>
  60. <br />
  61. <Link href="/change-email" className="btn btn-default">다시 시도하기</Link>
  62. </>
  63. }
  64. </div>
  65. </>
  66. );
  67. }