|
|
@@ -20,19 +20,19 @@
|
|
|
|
|
|
<th:block layout:fragment="content">
|
|
|
<main class="container mb">
|
|
|
- <div class="close">
|
|
|
- <a href="javascript:history.back(-1);" class="btn_close"><span></span><span></span></a>
|
|
|
- </div>
|
|
|
-
|
|
|
<!-- ★ 컨텐츠 시작 -->
|
|
|
<section class="content mb_login">
|
|
|
-
|
|
|
+ <div class="inner">
|
|
|
+ <div class="close"><a href="javascript:history.back(-1);" class="btn_close"><span></span><span></span></a></div>
|
|
|
+ </div>
|
|
|
<div class="inner">
|
|
|
<h2 class="title">로그인</h2>
|
|
|
</div>
|
|
|
<div class="inner">
|
|
|
<form class="form_wrap form_full" name="loginForm" id="loginForm" th:action="@{/login}" method="post">
|
|
|
- <div class="form_head"><h3 class="title sr-only">로그인</h3></div>
|
|
|
+ <div class="form_head">
|
|
|
+ <h3 class="title sr-only">로그인</h3>
|
|
|
+ </div>
|
|
|
<div class="form_field mt0">
|
|
|
<input type="text" name="loginId" placeholder="아이디" class="form_control"minlength="4" maxlength="12" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디"/>
|
|
|
</div>
|
|
|
@@ -47,37 +47,23 @@
|
|
|
</div>
|
|
|
<div class="right">
|
|
|
<ul>
|
|
|
- <li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a></li>
|
|
|
- <li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a></li>
|
|
|
+ <li>
|
|
|
+ <a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a>
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a>
|
|
|
+ </li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="help_block">
|
|
|
<!-- 보안문자 입력시 -->
|
|
|
- <div>
|
|
|
- <div class="captcha" style="display: none;"> <!-- 캡차영역 -->
|
|
|
- <ul>
|
|
|
- <li class="lap"> <!-- 캡차이미지 -->
|
|
|
- <div class="captcha_box"> <!-- 캡차이미지 -->
|
|
|
- <img src="" id="imgCaptcha"/>
|
|
|
- </div>
|
|
|
- <div class="captcha_btn_dual">
|
|
|
- <button type="button" id="play_audio" onclick="fnReloadCaptchaImage();">새로고침</button>
|
|
|
- <button type="button" id="swap_captcha">음성듣기</button>
|
|
|
- </div>
|
|
|
- </li>
|
|
|
- <li class="captcha_area">
|
|
|
- <label for="captcha" id="label_captcha_area" class="sr-only">보안문자 입력</label>
|
|
|
- <input type="text" id="captcha" name="captcha" placeholder="위 보안문자 이미지에 보이는 문자 입력" title="문자입력"/>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </div>
|
|
|
- <p class="t_err mt10 t_err_login_fail" style="display: none;">
|
|
|
+ <div id="recaptcha" class="g-recaptcha" style="display: none;" data-callback="fnRecaptchaCallback" th:data-sitekey="${sitekey}"></div>
|
|
|
+ <p class="t_err t_err_login_fail" style="display: none;">
|
|
|
<span id="err_msg">보안문자 입력을 다시 시도해 주세요.</span><br>
|
|
|
(10회 이상 실패하면 180초 동안 로그인이 불가능 합니다.)<br>
|
|
|
<span id="login_fail_cnt">4</span>회 실패 / 잔여 : <span id="login_remain_cnt">6</span>회<span id="blockSecs1" style="display: none;"> / <span id="blockSecs2">180</span>초 남음
|
|
|
</p>
|
|
|
- </div>
|
|
|
<!-- //보안문자 입력시 -->
|
|
|
</div>
|
|
|
<div class="ui_row mt20">
|
|
|
@@ -88,128 +74,56 @@
|
|
|
<h3 class="sr-only">간편로그인</h3>
|
|
|
<ul class="login_utill">
|
|
|
<li class="lu_kakao">
|
|
|
- <a href="javascript:void(0)">
|
|
|
+ <a href="javascript:void(0)" onclick="cfnLoginKakao();">
|
|
|
<div class="ico"></div>카카오로<br>시작하기
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="lu_naver">
|
|
|
- <a href="javascript:void(0)">
|
|
|
+ <a href="javascript:void(0)" onclick="cfnLoginNaver();">
|
|
|
<div class="ico"></div>네이버로<br>시작하기
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="lu_yes24">
|
|
|
- <a href="javascript:void(0)">
|
|
|
+ <a href="javascript:void(0)" onclick="cfnLoginYes24();">
|
|
|
<div class="ico"></div>YES24로<br>시작하기
|
|
|
</a>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
- <div class="t_c mt30"><botton class="btn_nonMb">비회원 주문조회</botton>
|
|
|
+ <div class="t_c mt30">
|
|
|
+ <botton class="btn_nonMb">비회원 주문조회</botton>
|
|
|
</div>
|
|
|
-
|
|
|
+ </div>
|
|
|
</section>
|
|
|
- <!-- ★ 컨텐츠 종료 -->
|
|
|
-
|
|
|
+ <!-- 컨텐츠 종료 -->
|
|
|
</main>
|
|
|
|
|
|
<script th:inline="javascript">
|
|
|
/*<![CDATA[*/
|
|
|
let ckLoginId = "ckLoginId";
|
|
|
+ let rechaptchCheck = true;
|
|
|
|
|
|
- // 로그인블락시간(초) 설정
|
|
|
- let fnSetLoginBlockTime = function() {
|
|
|
- let blockSecs = Number($("#blockSecs2").html()) - 1;
|
|
|
- $("#blockSecs2").html(blockSecs);
|
|
|
- if (blockSecs == 0) {
|
|
|
- clearTimeout(fnSetLoginBlockTime);
|
|
|
- $('#btnLogin').attr('disabled',false);
|
|
|
- } else {
|
|
|
- setTimeout(fnSetLoginBlockTime, 1000);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// 로그인
|
|
|
$('#btnLogin').on('click', function() {
|
|
|
if (!gagajf.validation($('#loginForm'))) {
|
|
|
return;
|
|
|
}
|
|
|
+ if (!rechaptchCheck) {
|
|
|
+ mcxDialog.alert("자동 방지 봇을 확인 한뒤 진행 해 주세요.");
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- let params = new Object();
|
|
|
+ let params = {};
|
|
|
params.loginId = $('#loginForm input[name=loginId]').val();
|
|
|
params.passwd = $('#loginForm input[name=passwd]').val();
|
|
|
-
|
|
|
+
|
|
|
$.post($('#loginForm').prop('action')
|
|
|
, $.param(params)
|
|
|
- , function(result) {
|
|
|
- if (result.status != 'OK') {
|
|
|
-
|
|
|
- if (result.status == 'PWD_5WRONG') {
|
|
|
- // Do nothing
|
|
|
- } else if (result.status == 'DORMANT_CUST') {
|
|
|
- // 휴면회원
|
|
|
- mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
|
|
|
- sureBtnText: "확인",
|
|
|
- sureBtnClick: function() {
|
|
|
- cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- return;
|
|
|
- } else if (result.status == 'SECEDE_CUST') {
|
|
|
- // 탈퇴회원
|
|
|
- } else if (result.status == 'SESSION_EXPIRED') {
|
|
|
- // 세션만료
|
|
|
- }
|
|
|
-
|
|
|
- if (!gagajf.isNull(result.message)) {
|
|
|
- let loginFailCnt = Number(result.loginFailInfo.loginFailCnt);
|
|
|
-
|
|
|
- $("#err_msg").html(result.message);
|
|
|
- $("#login_fail_cnt").html(loginFailCnt);
|
|
|
- $("#login_remain_cnt").html(10 - loginFailCnt);
|
|
|
- $(".t_err_login_fail").show();
|
|
|
-
|
|
|
- if (loginFailCnt >= 5 && loginFailCnt < 10) {
|
|
|
- // 비밀번호 5회 이상 틀린 경우 캡챠 노출
|
|
|
- $('.captcha').show();
|
|
|
- } else if (loginFailCnt >= 10) {
|
|
|
- $('.captcha').hide();
|
|
|
-
|
|
|
- // 비밀번호 10회 이상 틀린 경우 로그인 블락
|
|
|
- let blockSecs = Number(result.loginFailInfo.blockSecs);
|
|
|
- if (blockSecs > 0) {
|
|
|
- $("#blockSecs2").html(blockSecs);
|
|
|
- fnSetLoginBlockTime();
|
|
|
- $("#blockSecs1").show();
|
|
|
- $('#btnLogin').attr('disabled',true);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return; // 정상적으로 로그인 되지 않았으므로 return
|
|
|
- }
|
|
|
-
|
|
|
- document.location.href = result.returnUrl;
|
|
|
-
|
|
|
-// if (gagajf.isNull(result.returnUrl)) {
|
|
|
-// cfnGoToPage(_PAGE_MAIN);
|
|
|
-// } else {
|
|
|
-// if (result.returnUrl.indexOf(_PAGE_DIRECT_BUY) > -1) {
|
|
|
-// // 바로주문
|
|
|
-// jfOrderByMember();
|
|
|
-// } else if (result.returnUrl.indexOf(_PAGE_CUSTOMER_JOIN) > -1 ||
|
|
|
-// result.returnUrl.indexOf(_PAGE_CUSTOMER_ID_FIND) > -1 ||
|
|
|
-// result.returnUrl.indexOf(_PAGE_CUSTOMER_PW_FIND) > -1 ||
|
|
|
-// result.returnUrl.indexOf(_PAGE_CUSTOMER_JOIN_COMPLETE) > -1) {
|
|
|
-// cfnGoToPage(_PAGE_MAIN);
|
|
|
-// } else {
|
|
|
-// document.location.href = result.returnUrl;
|
|
|
-// }
|
|
|
-// }
|
|
|
- }
|
|
|
+ , fnReloadAfterLogin
|
|
|
, 'json');
|
|
|
});
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
// Save ID
|
|
|
$('#chkSaveId').on('click', function() {
|
|
|
if ($(this).is(":checked")) {
|
|
|
@@ -222,15 +136,115 @@
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
- // 캡챠 이미지 로딩
|
|
|
- let fnReloadCaptchaImage = function() {
|
|
|
- $('#imgCaptcha').attr('src', '/common/captcha.do?dummy=' + new Date());
|
|
|
+
|
|
|
+ //엔터키 로그인
|
|
|
+ $('#loginForm input[name=passwd]').keypress(function (event) {
|
|
|
+ if (event.which === 13) {
|
|
|
+ event.preventDefault();
|
|
|
+ $('#btnLogin').trigger('click');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 로그인 후 처리
|
|
|
+ var fnReloadAfterLogin = function(result) {
|
|
|
+ if (result.status === 'OK') {
|
|
|
+ document.location.href = result.returnUrl;
|
|
|
+ } else {
|
|
|
+ fnFailLoginProcess(result);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ // 로그인 실패 후 과정
|
|
|
+ var fnFailLoginProcess = function (result) {
|
|
|
+ // 탈퇴회원
|
|
|
+ if (result.status === 'SECEDE_CUST') {
|
|
|
+ mcxDialog.alert("탈퇴 회원 입니다.");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 휴면회원
|
|
|
+ if (result.status === 'DORMANT_CUST') {
|
|
|
+ mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
|
|
|
+ sureBtnText: "확인",
|
|
|
+ sureBtnClick: function() {
|
|
|
+ cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // CI(본인인증)정보 없는 회원
|
|
|
+ if (result.status === 'CI_EMPTY') {
|
|
|
+ // 본인이증 필요한 회원
|
|
|
+ mcxDialog.alertC("본인인증 후 다시 로그인 하시기 바랍니다.", {
|
|
|
+ sureBtnText: "확인",
|
|
|
+ sureBtnClick: function() {
|
|
|
+ cfnGoToPage(_PAGE_CUSTOMER_CERTIFICATION);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 비밀번호 틀린 경우
|
|
|
+ if (!gagajf.isNull(result.message)) {
|
|
|
+ grecaptcha.reset(); // 리캡챠 리셋
|
|
|
+ let loginFailCnt = Number(result.loginFailInfo.loginFailCnt);
|
|
|
+ $("#err_msg").html(result.message);
|
|
|
+ $("#login_fail_cnt").html(loginFailCnt);
|
|
|
+ $("#login_remain_cnt").html(10 - loginFailCnt);
|
|
|
+ $(".t_err_login_fail").show();
|
|
|
+
|
|
|
+ // 비밀번호 5회 이상 틀린 경우 캡챠 노출
|
|
|
+ if (loginFailCnt >= 5 && loginFailCnt < 10) {
|
|
|
+ $('#recaptcha').show();
|
|
|
+ rechaptchCheck = false;
|
|
|
+ // 비밀번호 10회 이상 틀린 경우 로그인 블락
|
|
|
+ } else if (loginFailCnt >= 10) {
|
|
|
+ $('#recaptcha').hide();
|
|
|
+ rechaptchCheck = true;
|
|
|
+ let blockSecs = Number(result.loginFailInfo.blockSecs);
|
|
|
+ if (blockSecs > 0) {
|
|
|
+ $("#blockSecs2").html(blockSecs);
|
|
|
+ fnSetLoginBlockTime();
|
|
|
+ $("#blockSecs1").show();
|
|
|
+ $('#btnLogin').attr('disabled',true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return; // 정상적으로 로그인 되지 않았으므로 return
|
|
|
}
|
|
|
|
|
|
- // SNS 로그인 콜백함수
|
|
|
+
|
|
|
+ // 구글 캡챠 콜백함수
|
|
|
+ var fnRecaptchaCallback = function () {
|
|
|
+ let token = $("#g-recaptcha-response").val();
|
|
|
+ let params = {};
|
|
|
+ params.token = token;
|
|
|
+ gagajf.ajaxSubmit('/verify/recaptcha','', fnVerifyReCaptchaCallback, params);
|
|
|
+ };
|
|
|
+
|
|
|
+ // Token 인증
|
|
|
+ var fnVerifyReCaptchaCallback = function (result) {
|
|
|
+ if (result.success) {
|
|
|
+ rechaptchCheck = true;
|
|
|
+ } else {
|
|
|
+ rechaptchCheck = false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ // 로그인블락시간(초) 설정
|
|
|
+ let fnSetLoginBlockTime = function() {
|
|
|
+ let blockSecs = Number($("#blockSecs2").html()) - 1;
|
|
|
+ $("#blockSecs2").html(blockSecs);
|
|
|
+ if (blockSecs <= 0) {
|
|
|
+ clearTimeout(fnSetLoginBlockTime);
|
|
|
+ $('#btnLogin').attr('disabled',false);
|
|
|
+ } else {
|
|
|
+ setTimeout(fnSetLoginBlockTime, 1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // SNS 로그인 콜백함수(네이버, 카카오, YES24)
|
|
|
var fnSnsSigninCallback = function(userInfo) {
|
|
|
- // Ci이 조회 시 없음
|
|
|
+ // 1. CI 정보로 사용자가 없어서 회원가입 프로세스 처리 중 이메일, 휴대전화 중복
|
|
|
if (userInfo.custStat === 'DUP_PHONE_CUST') {
|
|
|
mcxDialog.alert("이미 사용 중인 휴대전화번호 입니다.");
|
|
|
return;
|
|
|
@@ -239,58 +253,54 @@
|
|
|
mcxDialog.alert("이미 사용 중인 이메일 입니다.");
|
|
|
return;
|
|
|
}
|
|
|
- if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
|
|
|
- cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
|
|
|
- }
|
|
|
- // Ci이 조회 시 있음
|
|
|
+ // 2. SNS 로그인 정보로 탈퇴확인
|
|
|
if (userInfo.custStat === 'SECEDE_CUST') {
|
|
|
mcxDialog.alert("탈퇴 회원 입니다.");
|
|
|
return;
|
|
|
}
|
|
|
+ // 3. SNS 로그인 정보로 휴면확인
|
|
|
if (userInfo.custStat === 'DORMANT_CUST') {
|
|
|
- cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
|
|
|
+ mcxDialog.alertC("휴면 고객님께서는 휴면을<br>해지하신 후 사용하실 수 있습니다.", {
|
|
|
+ sureBtnText: "확인",
|
|
|
+ sureBtnClick: function() {
|
|
|
+ cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return;
|
|
|
}
|
|
|
- if (userInfo.custStat === 'FAIL_CUST') {
|
|
|
- mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
|
|
|
+ // 4. 휴대전화 정보가 없으면 SNS 가입화면 이동
|
|
|
+ if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
|
|
|
+ cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
|
|
|
+ }
|
|
|
+ // 5. YES24 첫 로그인 시도 시 정보동의 페이지 이동
|
|
|
+ if (userInfo.custStat === 'NEED_AGREE_CUST') {
|
|
|
+ cfnConsentUseInfo(userInfo.custNm);
|
|
|
return;
|
|
|
}
|
|
|
+ // 6. SNS 정보로 가입 성공시 가입완료 페이지 이동
|
|
|
if (userInfo.custStat === 'NEW_CUST') {
|
|
|
cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
|
|
|
+ return;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+ // 7.SNS 정보로 가입 실패시 안내 창 알림
|
|
|
+ if (userInfo.custStat === 'FAIL_CUST') {
|
|
|
+ mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 8. SNS 로그인 연동 성공 및 기존 SNS 연동된 회원 로그인 시도
|
|
|
if (userInfo.custStat === 'SUCC_CUST') {
|
|
|
let params = {};
|
|
|
params.snsType = userInfo.snsType;
|
|
|
params.snsId = [[${snsLoginPrefix}]] + userInfo.snsId;
|
|
|
$.post(_frontUrl + '/login'
|
|
|
, $.param(params)
|
|
|
- , function(result) {
|
|
|
- fnReloadAfterLogin(result);
|
|
|
- }
|
|
|
+ ,fnReloadAfterLogin
|
|
|
, "json");
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
- var fnReloadAfterLogin = function(result) {
|
|
|
- if (result.status === 'OK') {
|
|
|
- document.location.href = result.returnUrl;
|
|
|
- } else if (result.status === 'EMAIL_DUP') {
|
|
|
-
|
|
|
- } else if(result.status === 'DORMANT_CUST') {
|
|
|
- cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
|
|
|
- } else if(result.status === 'SECEDE_CUST') {
|
|
|
-
|
|
|
- } else {
|
|
|
- //cfnGoToPage(_PAGE_CUSTOMER_JOIN_CERTIFY_SNS);
|
|
|
- }
|
|
|
};
|
|
|
|
|
|
-
|
|
|
-
|
|
|
$(document).ready(function() {
|
|
|
+
|
|
|
$('#loginForm input[name=loginId]').val(gagajf.getCookie(ckLoginId));
|
|
|
if (gagajf.isNull($('#loginForm input[name=loginId]').val())) {
|
|
|
$('#loginForm input[name=loginId]').focus();
|
|
|
@@ -306,4 +316,4 @@
|
|
|
</th:block>
|
|
|
|
|
|
</body>
|
|
|
-</html>
|
|
|
+</html>
|