register.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. $("#fRegister").validate({
  2. onkeyup: false,
  3. onclick: false,
  4. onfocusout: false,
  5. showErrors: function (errorMap, errorList) {
  6. if (this.numberOfInvalids() && errorList.length > 0) {
  7. alert(errorList[0].message);
  8. $(errorList[0].element).focus();
  9. }
  10. },
  11. rules: {
  12. email: {required: true, email: true, is_email_able: true},
  13. password: {required: true, minlength: 8, is_password_able: true},
  14. password_confirmation: {required: true, equalTo: "#password"},
  15. nickname: {required: true, minlength: 2, maxlength: 20},
  16. agree_1: {required: true},
  17. agree_2: {required: true}
  18. },
  19. messages: {
  20. email: {
  21. required: "이메일 주소를 입력해주세요.",
  22. email: "이메일 주소가 유효하지 않습니다.",
  23. is_email_able: "이미 사용중인 이메일입니다."
  24. },
  25. password: {
  26. required: "비밀번호를 입력해주세요.",
  27. minlength: "비밀번호는 최소 8자 이상입니다.",
  28. is_password_able: "비밀번호가 유효하지 않습니다."
  29. },
  30. password_confirmation: {
  31. required: "비밀번호를 재입력해주세요.",
  32. equalTo: '비밀번호가 서로 일치하지 않습니다.'
  33. },
  34. nickname: {
  35. required: "닉네임을 입력해주세요.",
  36. minlength: "닉네임은 최소 2자 이상입니다.",
  37. maxlength: "닉네임은 최대 20자 이하 입니다."
  38. },
  39. agree_1: {
  40. required: "이용약관 동의가 필요합니다."
  41. },
  42. agree_2: {
  43. required: "개인정보처리방침 동의가 필요합니다."
  44. }
  45. },
  46. submitHandler: function() {
  47. if (!Register.emailAuthOk) {
  48. alert("이메일 인증이 필요합니다.");
  49. return false;
  50. }
  51. return true;
  52. }
  53. });
  54. const Register = {
  55. emailAuthOk: false,
  56. // 이메일 인증 요청
  57. requestSendVerifyLink: function (e) {
  58. let form = e.target.form;
  59. $.ajax({
  60. url: (BASE_URL + "/auth/register/sendVerifyLink"),
  61. type: "POST",
  62. async: true,
  63. cache: true,
  64. timeout: 3000,
  65. data: {email: form.elements["email"].value},
  66. processData: true,
  67. dataType: "json",
  68. success: function (response) {
  69. if (!response.success) {
  70. alert(response.message);
  71. } else {
  72. Register.switchVerifyEmailStep(e, 2);
  73. }
  74. },
  75. error: function (xhr, status, error) {
  76. procErrorEvent(xhr, status, error);
  77. }
  78. });
  79. },
  80. // 이메일 인증 확인
  81. requestCheckVerifiedEmail: function (e) {
  82. let form = e.target.form;
  83. $.ajax({
  84. url: (BASE_URL + "/auth/register/checkVerifiedEmail"),
  85. type: "POST",
  86. async: true,
  87. cache: true,
  88. timeout: 3000,
  89. processData: true,
  90. data: {email: form.elements["email"].value},
  91. dataType: "json",
  92. success: function (response) {
  93. if (!response.success) {
  94. alert("인증이 진행 중입니다.");
  95. } else {
  96. Register.switchVerifyEmailStep(e, 3);
  97. }
  98. },
  99. error: function (xhr, status, error) {
  100. procErrorEvent(xhr, status, error);
  101. }
  102. });
  103. },
  104. // 이메일 인증 결과
  105. switchVerifyEmailStep: function(e, step) {
  106. let btnVerifyEmail = document.getElementById("btnVerifyEmail");
  107. let txtVerifyEmail = document.getElementById("txtVerifyEmail");
  108. let timer;
  109. switch(step)
  110. {
  111. // 초기화
  112. case 1:
  113. btnVerifyEmail.innerHTML = '<button type="button" id="btnSendVerifyLinkRequest" class="btn btn-outline-secondary">인증하기</button>';
  114. txtVerifyEmail.innerHTML = "";
  115. break;
  116. // 진행중
  117. case 2:
  118. e.target.setAttribute("disabled", "disabled");
  119. txtVerifyEmail.innerHTML = '<small class="text-success">인증 메일을 발송했습니다. (유효시간 5분)<br/>메일 인증 후 인증완료를 해주세요.</small>';
  120. btnVerifyEmail.innerHTML = '<button type="button" id="btnVerifyEmailRequest" class="btn btn-outline-primary text-white">인증완료</button>';
  121. timer = setTimeout(function () { // 5분 후 만료
  122. Register.switchVerifyEmailStep(e, 1);
  123. }, 300000);
  124. break;
  125. // 완료
  126. case 3:
  127. let form = e.target.form;
  128. form.elements["email"].readOnly = true;
  129. txtVerifyEmail.innerHTML = '<small class="text-success">인증이 완료되었습니다.</small>';
  130. btnVerifyEmail.innerHTML = '<button type="button" class="btn btn-primary" disabled>인증완료</button>';
  131. this.emailAuthOk = true;
  132. clearTimeout(timer);
  133. break;
  134. }
  135. }
  136. }
  137. // 회원가입 Tip
  138. new bootstrap.Tooltip(document.getElementById("registerTip"), {
  139. placement: "auto"
  140. });
  141. // 비밀번호 Tip
  142. let passwordGuideTip = document.getElementById("passwordGuideTip");
  143. if (passwordGuideTip) {
  144. new bootstrap.Tooltip(passwordGuideTip, {placement: "auto"});
  145. }
  146. // 이메일 인증 요청
  147. $(document).on("click", "#btnSendVerifyLinkRequest", Register.requestSendVerifyLink);
  148. // 이메일 인증 확인
  149. $(document).on("click", "#btnVerifyEmailRequest", Register.requestCheckVerifiedEmail);