page.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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, throwError } 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((res) => {
  29. throwError(res);
  30. localStorage.removeItem('member');
  31. setComplete(true);
  32. }).catch(err => {
  33. setError(err.message);
  34. }).finally(() => {
  35. setLoading(false);
  36. });
  37. }, [token]);
  38. if (loading) {
  39. return <Loading />;
  40. }
  41. return (
  42. <>
  43. <div id="verifyEmail">
  44. {isComplete ?
  45. <>
  46. <h1>이메일 변경이 완료되었습니다.</h1>
  47. <blockquote>
  48. <strong>이메일 인증이 확인되었습니다.</strong><br />
  49. 다시 로그인 후 변경된 이메일로 서비스 이용이 가능합니다.<br />
  50. </blockquote>
  51. <br />
  52. <Link href="/login" className="btn btn-default">로그인</Link>
  53. </>
  54. :
  55. <>
  56. <h1>이메일 변경이 거부되었습니다.</h1>
  57. <blockquote>
  58. 인증 시간이 만료되었거나, 이미 인증되었을 수 있습니다.<br />
  59. 처음부터 다시 시도해 주십시오.
  60. </blockquote>
  61. <br />
  62. <Link href="/change-email" className="btn btn-default">다시 시도하기</Link>
  63. </>
  64. }
  65. </div>
  66. </>
  67. );
  68. }