Compare commits

..

2 Commits

Author SHA1 Message Date
김현욱
736cacae57 아이디/비밀번호 찾기 수정(1) 2025-12-19 17:14:49 +09:00
김현욱
e11797fa1e 통합관리자 로그인 수정 2025-12-19 17:13:57 +09:00
9 changed files with 636 additions and 25 deletions

View File

@@ -337,6 +337,9 @@ public interface BOMbrMapper {
public int insertBOPhoneAuth(BOMbrVO vo); public int insertBOPhoneAuth(BOMbrVO vo);
public int selectBOPhoneAuth(BOMbrVO vo); public int selectBOPhoneAuth(BOMbrVO vo);
public int insertBOEmailAuth(BOMbrVO vo);
public int selectBOEmailAuth(BOMbrVO vo);
public void insertBOMbrGradMapping(BOMbrVO mbrVO); public void insertBOMbrGradMapping(BOMbrVO mbrVO);
public void insertBOMemberSite(BOMbrVO mbrVO); public void insertBOMemberSite(BOMbrVO mbrVO);

View File

@@ -1026,6 +1026,65 @@ public class BOMbrService {
return message; return message;
} }
/**
* 이메일 인증번호 생성
*
* @param mbrVO
* @return
* @author
*/
public DataMap insertBOEmailAuth(BOMbrVO vo) {
DataMap message = new DataMap();
int result = 0;
try {
result = mapper.insertBOEmailAuth(vo);
if (result > 0) {
message.put("result", "success");
message.put("sndngInnb", vo.getSndngInnb());
} else {
message.put("result", "fail");
}
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return message;
}
/**
* 이메일 인증
*
* @param mbrVO
* @return
* @author
*/
public DataMap selectBOEmailAuth(BOMbrVO vo) {
DataMap message = new DataMap();
int result = 0;
try {
result = mapper.selectBOEmailAuth(vo);
if (result > 0) {
message.put("result", "success");
} else {
message.put("result", "fail");
}
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return message;
}
/** /**
* 회원구분코드 조회 * 회원구분코드 조회
* *

View File

@@ -191,6 +191,7 @@ public class BOEmailService {
List<BOEmailVO> voListNew = new ArrayList<BOEmailVO>(); List<BOEmailVO> voListNew = new ArrayList<BOEmailVO>();
BOEmailVO ListOne = voList.get(0); BOEmailVO ListOne = voList.get(0);
log.info("이메일 voList get(0) : {}", ListOne);
List<Integer> trgetSndList = mapper.selectBOEmailSndngTrgetSnb(ListOne.getEmailSndngInnb()); List<Integer> trgetSndList = mapper.selectBOEmailSndngTrgetSnb(ListOne.getEmailSndngInnb());
log.info("이메일 발송대상 순번 조회 => {}", trgetSndList); log.info("이메일 발송대상 순번 조회 => {}", trgetSndList);

View File

@@ -1372,10 +1372,15 @@ public class BOMssageService {
String smsUseAt = StringUtil.isNullToString(sndngMap.get("smsUseAt")); String smsUseAt = StringUtil.isNullToString(sndngMap.get("smsUseAt"));
String emailUseAt = StringUtil.isNullToString(sndngMap.get("emailUseAt")); String emailUseAt = StringUtil.isNullToString(sndngMap.get("emailUseAt"));
log.debug("카톡여부:문자여부:이메일여부 = {}",ntcntalkUseAt+":"+smsUseAt+":"+emailUseAt);
String ntcntalkSndngFormInnb = StringUtil.isNullToString(sndngMap.get("ntcntalkSndngFormInnb")); String ntcntalkSndngFormInnb = StringUtil.isNullToString(sndngMap.get("ntcntalkSndngFormInnb"));
String smsSndngFormInnb = StringUtil.isNullToString(sndngMap.get("smsSndngFormInnb")); String smsSndngFormInnb = StringUtil.isNullToString(sndngMap.get("smsSndngFormInnb"));
String emailSndngFormInnb = StringUtil.isNullToString(sndngMap.get("emailSndngFormInnb")); String emailSndngFormInnb = StringUtil.isNullToString(sndngMap.get("emailSndngFormInnb"));
log.debug("processTmpltMssage - paramMapList : {}",paramMapList);
log.debug("processTmpltMssage - emailSndngFormInnb : {}",emailSndngFormInnb);
//전부 미사용 시 //전부 미사용 시
boolean allNotY = !"Y".equals(ntcntalkUseAt) && !"Y".equals(smsUseAt) && !"Y".equals(emailUseAt); boolean allNotY = !"Y".equals(ntcntalkUseAt) && !"Y".equals(smsUseAt) && !"Y".equals(emailUseAt);
@@ -1481,6 +1486,7 @@ public class BOMssageService {
boEmailVO.setSecretKey(boCommonService.selectSecretkey()); boEmailVO.setSecretKey(boCommonService.selectSecretkey());
//이메일 발송내역 등록(치환코드 치환 x) //이메일 발송내역 등록(치환코드 치환 x)
// 이메일 발송그룹(GC_EMAIL) 등록
emailMapper.insertBOEmailSndngDtls(boEmailVO); emailMapper.insertBOEmailSndngDtls(boEmailVO);
if (recptnRjctUrl != null) { if (recptnRjctUrl != null) {
@@ -1499,14 +1505,16 @@ public class BOMssageService {
} }
try { try {
//이메일 발송대상 등록 //이메일 발송대상(GC_EMAIL_TO) 등록
emailMapper.insertBOEmailSndngTo(voList); emailMapper.insertBOEmailSndngTo(voList);
message.put("getEmailSndngInnb", boEmailVO.getEmailSndngInnb()); message.put("getEmailSndngInnb", boEmailVO.getEmailSndngInnb());
message.put("result", "success"); message.put("result", "success");
} catch (WnbtRestException wre){ } catch (WnbtRestException wre){
log.debug("이메일 발송 에러1");
throw new WnbtRestException(wre.getMessage()); throw new WnbtRestException(wre.getMessage());
} catch (Exception e) { } catch (Exception e) {
log.debug("이메일 발송 에러2");
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }

View File

@@ -358,6 +358,75 @@ public class MbrController {
); );
} }
/**
* 이메일 인증번호 생성
* @return
* @author
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/insertEmailAuth", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> insertEmailAuth(BOMbrVO vo, BindingResult bindingResult){
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
int random = (int) (Math.random() * 900000) + 100000;
vo.setCrtnb(String.format("%06d", random));
DataMap content = new DataMap();
content = service.insertBOEmailAuth(vo);
/** 자동발송 데이터 세팅 */
Map<String, Object> sopmalInfoMap = new HashMap<>();
BOMaSopmalVO sopmalVo = new BOMaSopmalVO();
sopmalVo.setSopmalCd(user.getSopmalCd());
sopmalInfoMap = maSopmalService.selectBOSopmalFooterInfo(sopmalVo);
DataMap sopmalInfo = (DataMap) sopmalInfoMap.get("sopmalInfo");
/** 개인 인증 자동발송 */
if (content.get("result").equals("success")) {
DataMap paramMap = new DataMap();
// 공통 필수입력 항목
paramMap.put("formDvCd", "FORM_DV_MBR");
paramMap.put("formDtlDvCd", "05");
paramMap.put("sopmalCd", user.getSopmalCd());
paramMap.put("mbrInnb", vo.getMbrInnb());//비회원 = NULL
paramMap.put("recpntNm", vo.getMbrNm());
paramMap.put("recpntEmail", vo.getEmail());
// SMS
paramMap.put("shopname", sopmalInfo.get("sopmalNm"));
paramMap.put("authnum", vo.getCrtnb());
boMssageService.insertBOAtmcsndng(paramMap);
}
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 이메일 인증
* @return
* @author
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectEmailAuth", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> selectEmailAuth(BOMbrVO vo, BindingResult bindingResult){
DataMap content = new DataMap();
content = service.selectBOEmailAuth(vo);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/** /**
* 회원가입 * 회원가입
* @return * @return
@@ -769,6 +838,137 @@ public class MbrController {
paramMap.put("recpntNm", vo.getMbrNm()); paramMap.put("recpntNm", vo.getMbrNm());
paramMap.put("recptnNb", vo.getMbtlnb()); paramMap.put("recptnNb", vo.getMbtlnb());
// SMS
paramMap.put("shopName", sopmalInfo.get("sopmalNm"));
paramMap.put("userid", content.get("selectId"));
boMssageService.insertBOAtmcsndng(paramMap);
}
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 이메일 인증 패스워드 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectPasswordSearchEmail", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> selectIdPasswordSearchEmail(BOMbrVO vo){
List<Map<String, String>> errorList = new ArrayList<>();
if (StringUtil.isEmpty(vo.getEmail())) {
errorList.add(ValidateResultConverter.setErrorMap("email", "이메일 주소를 입력해 주세요."));
}
if (StringUtil.isEmpty(vo.getMbrId())) {
errorList.add(ValidateResultConverter.setErrorMap("mbrId", "아이디를 입력해 주세요."));
}
if (StringUtil.isEmpty(vo.getMbrNm())) {
errorList.add(ValidateResultConverter.setErrorMap("mbrNm", "이름을 입력해 주세요."));
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setSopmalCd(user.getSopmalCd());
vo.setMbrDvCd(service.selectBOMbrDvCd(vo));
String secretKey = commonService.selectSecretkey();
vo.setSecretKey(secretKey);
log.debug("selectIdPasswordSearchEmail vo: {}", vo);
DataMap content = service.selectBOPasswordSearch(vo);
log.debug("selectIdPasswordSearchEmail content: {}", content);
/** 자동발송 데이터 세팅 */
Map<String, Object> sopmalInfoMap = new HashMap<>();
BOMaSopmalVO sopmalVo = new BOMaSopmalVO();
sopmalVo.setSopmalCd(vo.getSopmalCd());
sopmalInfoMap = maSopmalService.selectBOSopmalFooterInfo(sopmalVo);
DataMap sopmalInfo = (DataMap) sopmalInfoMap.get("sopmalInfo");
/** 신규 패스워드 자동발송 */
if (content.get("result").equals("success")) {
DataMap paramMap = new DataMap();
// 공통 필수입력 항목
paramMap.put("formDvCd", "FORM_DV_MBR");
paramMap.put("formDtlDvCd", "04");
paramMap.put("sopmalCd", user.getSopmalCd());
paramMap.put("mbrInnb", vo.getMbrInnb());//비회원 = NULL
paramMap.put("recpntNm", vo.getMbrNm());
paramMap.put("recptnNb", vo.getMbtlnb());
paramMap.put("recpntEmail", vo.getEmail());
// SMS
paramMap.put("shopName", sopmalInfo.get("sopmalNm"));
paramMap.put("password", content.get("newPassword"));
boMssageService.insertBOAtmcsndng(paramMap);
}
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 이메일 인증 아이디 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectIdSearchEmail", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> selectIdSearchEmail(BOMbrVO vo){
List<Map<String, String>> errorList = new ArrayList<>();
if (StringUtil.isEmpty(vo.getEmail())) {
errorList.add(ValidateResultConverter.setErrorMap("email", "이메일 주소를 입력해 주세요."));
}
if (StringUtil.isEmpty(vo.getMbrNm())) {
errorList.add(ValidateResultConverter.setErrorMap("mbrNm", "이름을 입력해 주세요."));
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setSopmalCd(user.getSopmalCd());
vo.setMbrDvCd(service.selectBOMbrDvCd(vo));
String secretKey = commonService.selectSecretkey();
vo.setSecretKey(secretKey);
log.debug("selectIdSearchEmail vo: {}", vo);
DataMap content = service.selectBOIdSearch(vo);
log.debug("selectIdSearchEmail content: {}", content);
/** 자동발송 데이터 세팅 */
Map<String, Object> sopmalInfoMap = new HashMap<>();
BOMaSopmalVO sopmalVo = new BOMaSopmalVO();
sopmalVo.setSopmalCd(vo.getSopmalCd());
sopmalInfoMap = maSopmalService.selectBOSopmalFooterInfo(sopmalVo);
DataMap sopmalInfo = (DataMap) sopmalInfoMap.get("sopmalInfo");
/** 전체 아이디 자동발송 */
if (content.get("result").equals("success")) {
DataMap paramMap = new DataMap();
// 공통 필수입력 항목
paramMap.put("formDvCd", "FORM_DV_MBR");
paramMap.put("formDtlDvCd", "03");
paramMap.put("sopmalCd", user.getSopmalCd());
paramMap.put("mbrInnb", vo.getMbrInnb());//비회원 = NULL
paramMap.put("recpntNm", vo.getMbrNm());
paramMap.put("recptnNb", vo.getMbtlnb());
paramMap.put("recpntEmail", vo.getEmail());
// SMS // SMS
paramMap.put("shopName", sopmalInfo.get("sopmalNm")); paramMap.put("shopName", sopmalInfo.get("sopmalNm"));
paramMap.put("userid", content.get("selectId")); paramMap.put("userid", content.get("selectId"));

View File

@@ -22,6 +22,7 @@ button.reSendung=\uC7AC\uC804\uC1A1
button.sendung=\uC778\uC99D\uBC88\uD638 \uBC1C\uC1A1 button.sendung=\uC778\uC99D\uBC88\uD638 \uBC1C\uC1A1
button.certification=\uD734\uB300\uD3F0 \uC778\uC99D button.certification=\uD734\uB300\uD3F0 \uC778\uC99D
button.certificationDone=\uC778\uC99D \uC644\uB8CC button.certificationDone=\uC778\uC99D \uC644\uB8CC
button.certificationEmail=\uC778\uC99D
button.delete=\uC0AD\uC81C button.delete=\uC0AD\uC81C
button.duplication=\uC911\uBCF5 \uD655\uC778 button.duplication=\uC911\uBCF5 \uD655\uC778
button.doubleCheck=\uC911\uBCF5 \uD655\uC778 button.doubleCheck=\uC911\uBCF5 \uD655\uC778

View File

@@ -1607,7 +1607,12 @@
WHERE 1 = 1 WHERE 1 = 1
AND MBR_NM = #{mbrNm} AND MBR_NM = #{mbrNm}
AND MBR_ID = #{mbrId} AND MBR_ID = #{mbrId}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(email)">
AND EMAIL = HEX(AES_ENCRYPT(#{email}, #{secretKey}))
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbtlnb)">
AND MBTLNB = HEX(AES_ENCRYPT(#{mbtlnb}, #{secretKey})) AND MBTLNB = HEX(AES_ENCRYPT(#{mbtlnb}, #{secretKey}))
</if>
AND MBR_DV_CD = #{mbrDvCd} AND MBR_DV_CD = #{mbrDvCd}
</select> </select>
@@ -1669,7 +1674,12 @@
AND GM.USE_AT = 'Y' AND GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = #{mbrDvCd} AND GM.MBR_DV_CD = #{mbrDvCd}
AND GM.MBR_NM = #{mbrNm} AND GM.MBR_NM = #{mbrNm}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(email)">
AND GM.EMAIL = HEX(AES_ENCRYPT(#{email}, #{secretKey}))
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbtlnb)">
AND GM.MBTLNB = HEX(AES_ENCRYPT(#{mbtlnb}, #{secretKey})) AND GM.MBTLNB = HEX(AES_ENCRYPT(#{mbtlnb}, #{secretKey}))
</if>
) TGT ) TGT
WHERE 1 = 1 WHERE 1 = 1
AND RK = 1 AND RK = 1
@@ -2028,6 +2038,41 @@
AND CRTNB = #{crtnb} AND CRTNB = #{crtnb}
</select> </select>
<!-- 이메일 인증번호 생성 -->
<insert id="insertBOEmailAuth"
parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO"
useGeneratedKeys="true"
keyProperty="sndngInnb">
INSERT
INTO GC_CRTNB (
EMAIL,
CRTNB,
REGUSR,
REGIST_DT
)
VALUES (
#{email},
#{crtnb},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb)">
#{mbrInnb},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(mbrInnb)">
'0',
</if>
SYSDATE()
)
</insert>
<!-- 이메일 인증 -->
<select id="selectBOEmailAuth"
parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO" resultType="Integer">
SELECT COUNT(1)
FROM GC_CRTNB
WHERE 1 = 1
AND EMAIL = #{email}
AND CRTNB = #{crtnb}
</select>
<!-- 회원별 등급매핑 --> <!-- 회원별 등급매핑 -->
<insert id="insertBOMbrGradMapping" <insert id="insertBOMbrGradMapping"
parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO"> parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO">

View File

@@ -13,7 +13,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>앨리스랩 통합관리자</title> <title>통합관리자</title>
<!-- CSS --> <!-- CSS -->
<link rel="stylesheet" href="/login/admin/css/style.css"> <link rel="stylesheet" href="/login/admin/css/style.css">
@@ -206,6 +206,7 @@
case 401: case 401:
throw new Error('회원아이디나 비밀번호를 다시 확인해주세요.'); throw new Error('회원아이디나 비밀번호를 다시 확인해주세요.');
case 404: case 404:
throw new Error('회원아이디나 비밀번호를 다시 확인해주세요.');
break; break;
default: default:
throw new Error('회원 로그인에 실패하였습니다. 관리자에게 문의해주세요.'); throw new Error('회원 로그인에 실패하였습니다. 관리자에게 문의해주세요.');

View File

@@ -27,26 +27,30 @@
$(document).ready(function() { $(document).ready(function() {
fn_select_tap('id'); fn_select_tap('id');
fn_show_phoneAuth(); fn_show_emailAuth();
// fn_show_phoneAuth();
first = 0; first = 0;
$(".login__inputBox__alertText").hide(); $(".login__inputBox__alertText").hide();
fn_alert_hide($("#srchIdMbrNm"), $("#srchIdMbrNmAlert")); fn_alert_hide($("#srchIdMbrNm"), $("#srchIdMbrNmAlert"));
fn_alert_hide($("#srchIdPhoneNb"), $("#srchIdPhoneNbAlert")); // fn_alert_hide($("#srchIdPhoneNb"), $("#srchIdPhoneNbAlert"));
fn_alert_hide($("#srchIdEmail"), $("#srchIdEmailAlert"));
fn_alert_hide($("#srchIdSendungNb"), $("#srchIdSendungNbAlert")); fn_alert_hide($("#srchIdSendungNb"), $("#srchIdSendungNbAlert"));
fn_alert_hide($("#srchPsMbrNm"), $("#srchPsMbrNmAlert")); fn_alert_hide($("#srchPsMbrNm"), $("#srchPsMbrNmAlert"));
fn_alert_hide($("#srchPsMbrId"), $("#srchPsMbrIdAlert")); fn_alert_hide($("#srchPsMbrId"), $("#srchPsMbrIdAlert"));
fn_alert_hide($("#srchPsPhoneNb"), $("#srchPsPhoneNbAlert")); // fn_alert_hide($("#srchPsPhoneNb"), $("#srchPsPhoneNbAlert"));
fn_alert_hide($("#srchPsEmail"), $("#srchPsEmailAlert"));
fn_alert_hide($("#srchPsSendungNb"), $("#srchPsSendungNbAlert")); fn_alert_hide($("#srchPsSendungNb"), $("#srchPsSendungNbAlert"));
$('.certInp').on('keydown', function(e) { $('.certInp').on('keydown', function(e) {
if (e.keyCode == 13) { if (e.keyCode == 13) {
$('.phoneAuthBtn').first().click(); $('.emailAuthBtn').first().click();
} }
}); });
$('.certNb').on('keydown', function(e) { $('.certNb').on('keydown', function(e) {
if (e.keyCode == 13) { if (e.keyCode == 13) {
fn_confim_own(); fn_confim_own_email();
// fn_confim_own();
} }
}); });
}); });
@@ -75,13 +79,14 @@
//입력값 초기화 //입력값 초기화
first = 0; first = 0;
certNb = ''; certNb = '';
fn_stop_timer(); fn_stop_email_timer();
// fn_stop_timer();
$('.input-text').val(''); $('.input-text').val('');
if(isChkd_own){ if(isChkd_own){
$('.input-text').attr("readonly", false); $('.input-text').attr("readonly", false);
$('.phoneAuthBtn').show(); $('.emailAuthBtn').show();
$('.phoneAuthOkBtn').hide(); $('.emailAuthOkBtn').hide();
$('#resIdForm').hide(); $('#resIdForm').hide();
$('#resPswdForm').hide(); $('#resPswdForm').hide();
isChkd_own = false; isChkd_own = false;
@@ -104,6 +109,52 @@
$('#findPswd').click(); $('#findPswd').click();
} }
/* ********************************************************
* 이메일 인증 버튼 클릭시, 이메일 인증 박스 노출
******************************************************** */
const fn_show_emailAuth = function() {
let emailAuthBtn = $('.emailAuthBtn');
let emailAuthContent = $('.emailAuthContent');
emailAuthContent.hide();
emailAuthBtn.click(function () {
if (findType === 'id') {
if(!$('#srchIdMbrNm').val()){
alert('이름을 입력해 주세요.');
$('#srchIdMbrNm').focus();
return;
}else if(!$('#srchIdEmail').val()){
alert('이메일 주소를 입력해 주세요.');
$('#srchIdPhoneNb').focus();
return;
}
$('#reqIdForm .emailAuthContent').show();
$('#srchIdSendungNb').focus();
}else {
if(!$('#srchPsMbrNm').val()){
alert('이름을 입력해 주세요.');
$('#srchPsMbrNm').focus();
return;
}else if(!$('#srchPsMbrId').val()){
alert('아이디를 입력해 주세요.');
$('#srchPsMbrId').focus();
return;
}else if(!$('#srchPsEmail').val()){
alert('이메일 주소를 입력해 주세요.');
$('#srchPsEmail').focus();
return;
}
$('#reqPswdForm .emailAuthContent').show();
$('#srchPsSendungNb').focus();
}
fn_email_sending_number();
});
}
/* ******************************************************** /* ********************************************************
* 휴대폰 인증 버튼 클릭시, 휴대폰 인증 박스 노출 * 휴대폰 인증 버튼 클릭시, 휴대폰 인증 박스 노출
******************************************************** */ ******************************************************** */
@@ -168,11 +219,84 @@
seconds--; seconds--;
} else { } else {
fn_stop_timer(); fn_stop_email_timer();
// fn_stop_timer();
alert('인증번호 유효시간이 만료되었습니다.'); alert('인증번호 유효시간이 만료되었습니다.');
} }
} }
/* ********************************************************
* 이메일 인증 번호 발송
******************************************************** */
first = 0;
certNb = '';
const fn_email_sending_number = function() {
if(timerRunning){
return;
}
let mbrEmail;
let mbrNm;
let mbtlnb;
if (findType === 'id') {
mbrEmail = $('#srchIdEmail').val();
mbrNm = $('#srchIdMbrNm').val();
} else {
mbrEmail = $('#srchPsEmail').val();
mbrNm = $('#srchPsMbrNm').val();
}
if(certNb === mbrEmail){
first++;
}else{
first = 0;
}
certNb = mbrEmail;
let params = {
'mbrNm' : mbrNm,
'email': mbrEmail
};
$.ajax({
type : 'post',
url : '<c:url value="/sopmal/mbr/insertEmailAuth"/>',
data : params,
success : function (Data) {
let result = JSON.parse(Data.resBody.result);
if(result.result == "success"){
if (first > 0) {
alert('인증번호가 재발송되었습니다.');
} else if (first === 0) {
alert('인증번호가 발송되었습니다.');
first++;
} else {
return;
}
let sndngInnb = (findType === 'id') ? $('#srchIdForm .sndngInnb') : $('#srchPswdForm .sndngInnb');
sndngInnb.val(result.sndngInnb);
}else {
alert('인증번호 발송에 실패했습니다.');
fn_stop_email_timer();
return;
}
}
});
$('.input-text').attr("readonly", true);
$('.certNb').attr("readonly", false);
clearInterval(countdown);
seconds = 180;
fn_set_timeOut();
countdown = setInterval(fn_set_timeOut, 1000);
timerRunning = true;
}
/* ******************************************************** /* ********************************************************
* 휴대폰 인증 번호 발송 * 휴대폰 인증 번호 발송
******************************************************** */ ******************************************************** */
@@ -248,6 +372,22 @@
timerRunning = true; timerRunning = true;
} }
/* ********************************************************
* 타이머 정지 함수
******************************************************** */
const fn_stop_email_timer = function() {
if (timerRunning) {
clearInterval(countdown);
$('.timer').text('03:00');
$('.certNb').val('');
$('.emailAuthContent').hide();
$('.input-text').attr("readonly", false);
timerRunning = false;
}
}
/* ******************************************************** /* ********************************************************
* 타이머 정지 함수 * 타이머 정지 함수
******************************************************** */ ******************************************************** */
@@ -264,6 +404,126 @@
} }
} }
/* ********************************************************
* 이메일 인증 확인
******************************************************** */
isChkd_own = false;
const fn_confim_own_email = function() {
if (first <= 0) return;
let sndngInnb;
let mbrEmail;
let crtnb;
if (findType === 'id') {
sndngInnb = $('#srchIdForm .sndngInnb').val();
mbrEmail = $('#srchIdEmail').val();
crtnb = $('#srchIdSendungNb').val();
} else {
sndngInnb = $('#srchPswdForm .sndngInnb').val();
mbrEmail = $('#srchPsEmail').val();
crtnb = $('#srchPsSendungNb').val();
}
fn_stop_email_timer();
let params = {
'sndngInnb': sndngInnb,
'email': mbrEmail,
'crtnb' : crtnb
};
$.ajax({
type : 'post',
url : '<c:url value="/sopmal/mbr/selectEmailAuth"/>',
data : params,
success : function (Data) {
let result = JSON.parse(Data.resBody.result);
if(result.result == "success"){
alert('인증되었습니다.');
$('.emailAuthOkBtn').show();
$('.emailAuthBtn').hide();
isChkd_own = true;
fn_select_infor_email();
$('.input-text').attr("readonly", true);
}else {
alert('인증번호가 일치하지 않습니다.');
return;
}
}
});
}
/* ********************************************************
* 아이디 패스워드 조회(이메일)
******************************************************** */
const fn_select_infor_email = function() {
let mbrId = '';
let mbrEmail = '';
let mbrNm = '';
let url = '';
if (findType === 'id') {
url = '<c:url value="/sopmal/mbr/selectIdSearchEmail"/>';
mbrNm = $('#srchIdMbrNm').val().trim();
mbrEmail = $('#srchIdEmail').val().trim().replace(/-/g, '');
} else {
url = '<c:url value="/sopmal/mbr/selectPasswordSearchEmail"/>';
mbrNm = $('#srchPsMbrNm').val().trim();
mbrId = $('#srchPsMbrId').val().trim();
mbrEmail = $('#srchPsEmail').val().trim().replace(/-/g, '');
}
let params = {
'mbrId' : mbrId,
'email': mbrEmail,
'mbrNm' : mbrNm
};
$.ajax({
type : 'post',
url : url,
data : params,
success : function(data) {
let result = JSON.parse(data.resBody.result);
if (findType === 'id') {
$('#reqIdForm').hide();
$('#resIdForm').show();
if(result.result == "success"){
$('#resIdForm').find('.userId').text(result.selectId);
$('.findSuccess').show();
$('.findFail').hide();
}else {
$('.findSuccess').hide();
$('.findFail').show();
}
} else if (findType === 'pswd') {
$('#reqPswdForm').hide();
$('#resPswdForm').show();
if(result.result == "success"){
let message = '회원님의 휴대폰(' + fn_hide_numbers(mbtlnb)+ ')';
$('#resPswdForm').find('.mbph').text(message);
$('.findSuccess').show();
$('.findFail').hide();
}
else {
$('.findSuccess').hide();
$('.findFail').show();
}
}
}
});
}
/* ******************************************************** /* ********************************************************
* 휴대폰 인증 확인 * 휴대폰 인증 확인
******************************************************** */ ******************************************************** */
@@ -434,20 +694,37 @@
<div class="login__inputBox"> <div class="login__inputBox">
<input type="text" class="input-text full certInp" id="srchIdMbrNm" name="mbrNm" title="이름" placeholder="이름"> <input type="text" class="input-text full certInp" id="srchIdMbrNm" name="mbrNm" title="이름" placeholder="이름">
<p class="login__inputBox__alertText" id="srchIdMbrNmAlert">이름을 입력해 주세요.</p> <p class="login__inputBox__alertText" id="srchIdMbrNmAlert">이름을 입력해 주세요.</p>
<%-- <div class="inputWithBtn">--%>
<%-- <input type="text" class="input-text full number certInp" id="srchIdPhoneNb" name="mbtlnb" title="휴대폰" placeholder="휴대폰번호 입력 (’-’ 없이)" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13">--%>
<%-- <button type="button" class="btn md theme outline phoneAuthBtn"><spring:message code="button.certification"/></button>--%>
<%-- <!-- 인증완료시 버튼 -->--%>
<%-- <button type="button" class="btn md outline phoneAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button>--%>
<%-- </div>--%>
<%-- <p class="login__inputBox__alertText" id="srchIdPhoneNbAlert">휴대폰번호를 입력해 주세요.</p>--%>
<%-- <div class="inputWithBtn phoneAuthContent">--%>
<%-- <input type="hidden" class="sndngInnb">--%>
<%-- <div class="inputTimer">--%>
<%-- <input type="text" class="input-text full number certNb" id="srchIdSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6">--%>
<%-- <span class="inputTimer__time timer">03:00</span>--%>
<%-- </div>--%>
<%-- <button type="button" class="btn md gray" onclick="fn_confim_own();"><spring:message code="button.ok"/></button>--%>
<%-- </div>--%>
<%-- <p class="login__inputBox__alertText" id="srchIdSendungNbAlert">인증번호를 입력해 주세요.</p>--%>
<div class="inputWithBtn"> <div class="inputWithBtn">
<input type="text" class="input-text full number certInp" id="srchIdPhoneNb" name="mbtlnb" title="휴대폰" placeholder="휴대폰번호 입력 (’-’ 없이)" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13"> <input type="text" class="input-text full certInp" id="srchIdEmail" name="mbrEmail" title="휴대폰" placeholder="이메일을 입력해주세요">
<button type="button" class="btn md theme outline phoneAuthBtn"><spring:message code="button.certification"/></button> <button type="button" class="btn md theme outline emailAuthBtn"><spring:message code="button.certificationEmail"/></button>
<!-- 인증완료시 버튼 --> <!-- 인증완료시 버튼 -->
<button type="button" class="btn md outline phoneAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button> <button type="button" class="btn md outline emailAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button>
</div> </div>
<p class="login__inputBox__alertText" id="srchIdPhoneNbAlert">휴대폰번호를 입력해 주세요.</p> <p class="login__inputBox__alertText" id="srchIdEmailAlert">이메일 주소를 입력해 주세요.</p>
<div class="inputWithBtn phoneAuthContent"> <div class="inputWithBtn emailAuthContent">
<input type="hidden" class="sndngInnb"> <input type="hidden" class="sndngInnb">
<div class="inputTimer"> <div class="inputTimer">
<input type="text" class="input-text full number certNb" id="srchIdSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6"> <input type="text" class="input-text full number certNb" id="srchIdSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6">
<span class="inputTimer__time timer">03:00</span> <span class="inputTimer__time timer">05:00</span>
</div> </div>
<button type="button" class="btn md gray" onclick="fn_confim_own();"><spring:message code="button.ok"/></button> <button type="button" class="btn md gray" onclick="fn_confim_own_email();"><spring:message code="button.ok"/></button>
</div> </div>
<p class="login__inputBox__alertText" id="srchIdSendungNbAlert">인증번호를 입력해 주세요.</p> <p class="login__inputBox__alertText" id="srchIdSendungNbAlert">인증번호를 입력해 주세요.</p>
</div> </div>
@@ -477,20 +754,36 @@
<p class="login__inputBox__alertText" id="srchPsMbrNmAlert">이름을 입력해 주세요.</p> <p class="login__inputBox__alertText" id="srchPsMbrNmAlert">이름을 입력해 주세요.</p>
<input type="text" class="input-text full certInp" id="srchPsMbrId" name="mbrId" title="아이디" placeholder="아이디"> <input type="text" class="input-text full certInp" id="srchPsMbrId" name="mbrId" title="아이디" placeholder="아이디">
<p class="login__inputBox__alertText" id="srchPsMbrIdAlert">아이디를 입력해 주세요.</p> <p class="login__inputBox__alertText" id="srchPsMbrIdAlert">아이디를 입력해 주세요.</p>
<%-- <div class="inputWithBtn">--%>
<%-- <input type="text" class="input-text full number certInp" id="srchPsPhoneNb" name="mbtlnb" title="휴대폰" placeholder="휴대폰번호 입력 (’-’ 없이)" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13">--%>
<%-- <button type="button" class="btn md theme outline phoneAuthBtn"><spring:message code="button.certification"/></button>--%>
<%-- <!-- 인증완료시 버튼 -->--%>
<%-- <button type="button" class="btn md outline phoneAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button>--%>
<%-- </div>--%>
<%-- <p class="login__inputBox__alertText" id="srchPsPhoneNbAlert">휴대폰번호를 입력해 주세요.</p>--%>
<%-- <div class="inputWithBtn phoneAuthContent">--%>
<%-- <input type="hidden" class="sndngInnb">--%>
<%-- <div class="inputTimer">--%>
<%-- <input type="text" class="input-text full number certNb" id="srchPsSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6">--%>
<%-- <span class="inputTimer__time timer">03:00</span>--%>
<%-- </div>--%>
<%-- <button type="button" class="btn md gray" onclick="fn_confim_own();"><spring:message code="button.ok"/></button>--%>
<%-- </div>--%>
<%-- <p class="login__inputBox__alertText" id="srchPsSendungNbAlert">인증번호를 입력해 주세요.</p>--%>
<div class="inputWithBtn"> <div class="inputWithBtn">
<input type="text" class="input-text full number certInp" id="srchPsPhoneNb" name="mbtlnb" title="휴대폰" placeholder="휴대폰번호 입력 (’-’ 없이)" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13"> <input type="text" class="input-text full certInp" id="srchPsEmail" name="mbrEmail" title="이메일" placeholder="이메일을 입력해주세요">
<button type="button" class="btn md theme outline phoneAuthBtn"><spring:message code="button.certification"/></button> <button type="button" class="btn md theme outline emailAuthBtn"><spring:message code="button.certificationEmail"/></button>
<!-- 인증완료시 버튼 --> <!-- 인증완료시 버튼 -->
<button type="button" class="btn md outline phoneAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button> <button type="button" class="btn md outline emailAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button>
</div> </div>
<p class="login__inputBox__alertText" id="srchPsPhoneNbAlert">휴대폰번호를 입력해 주세요.</p> <p class="login__inputBox__alertText" id="srchPsEmailAlert">이메일 주소를 입력해 주세요.</p>
<div class="inputWithBtn phoneAuthContent"> <div class="inputWithBtn emailAuthContent">
<input type="hidden" class="sndngInnb"> <input type="hidden" class="sndngInnb">
<div class="inputTimer"> <div class="inputTimer">
<input type="text" class="input-text full number certNb" id="srchPsSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6"> <input type="text" class="input-text full number certNb" id="srchPsSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6">
<span class="inputTimer__time timer">03:00</span> <span class="inputTimer__time timer">05:00</span>
</div> </div>
<button type="button" class="btn md gray" onclick="fn_confim_own();"><spring:message code="button.ok"/></button> <button type="button" class="btn md gray" onclick="fn_confim_own_email();"><spring:message code="button.ok"/></button>
</div> </div>
<p class="login__inputBox__alertText" id="srchPsSendungNbAlert">인증번호를 입력해 주세요.</p> <p class="login__inputBox__alertText" id="srchPsSendungNbAlert">인증번호를 입력해 주세요.</p>
</div> </div>