diff --git a/egovframe-template-simple-react-contribution/src/pages/login/EgovLoginContent.jsx b/egovframe-template-simple-react-contribution/src/pages/login/EgovLoginContent.jsx
index 778460b..a4d329c 100644
--- a/egovframe-template-simple-react-contribution/src/pages/login/EgovLoginContent.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/login/EgovLoginContent.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect, useRef } from 'react';
+import React, {useState, useEffect, useRef, useCallback} from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import {parseJwt} from "../../utils/parseJwt";
@@ -22,8 +22,8 @@ function EgovLoginContent(props) {
const location = useLocation();
console.log("EgovLoginContent [location] : ", location);
- const [userInfo, setUserInfo] = useState({ username: '', password: 'default', userSe: 'USR' });
- // eslint-disable-next-line no-unused-vars
+ const [userInfo, setUserInfo] = useState({ username: '', password: 'default', email: '', userSe: 'USR'});
+ // eslint-disable-next-line no-unused-vars
const [saveIDFlag, setSaveIDFlag] = useState(false);
@@ -37,17 +37,17 @@ function EgovLoginContent(props) {
const KEY_ID = "KEY_ID";
const KEY_SAVE_ID_FLAG = "KEY_SAVE_ID_FLAG";
-
+
const handleSaveIDFlag = () => {
setLocalItem(KEY_SAVE_ID_FLAG, !saveIDFlag)
setSaveIDFlag(!saveIDFlag);
};
-
+
useEffect(() => {
let idFlag = getLocalItem(KEY_SAVE_ID_FLAG);
if (idFlag === null) {
setSaveIDFlag(false);
- // eslint-disable-next-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
idFlag = false;
} else {
setSaveIDFlag(idFlag);
@@ -64,13 +64,13 @@ function EgovLoginContent(props) {
useEffect(() => {
let data = getLocalItem(KEY_ID);
if (data !== null) {
- setUserInfo({ username: data, password: 'default', userSe: 'USR' });
+ setUserInfo({ username: data, password: 'default', email: '', userSe: 'USR' });
}
}, []);
const submitFormHandler = (e) => {
console.log("EgovLoginContent submitFormHandler()");
-
+
const loginUrl = "/auth/login"
const requestOptions = {
method: "POST",
@@ -101,18 +101,20 @@ function EgovLoginContent(props) {
document.querySelector('.all_menu.WEB').classList.add('closed');
document.querySelector('.btnAllMenu').classList.remove('active');
document.querySelector('.btnAllMenu').title = '전체메뉴 닫힘';
- document.querySelector('.all_menu.Mobile').classList.add('closed');
+ document.querySelector('.all_menu.Mobile').classList.add('closed');
} else {
alert(resp.resultMessage)
}
})
}
- const idFindModal = () => {
- setModalTitle("ID 찾기")
- setModalBody(IdFindForm)
- handleShow();
- }
+ const idFindModal = useCallback(
+ ()=> {
+ setModalTitle("ID 찾기")
+ setModalBody(IdFindForm)
+ handleShow();
+ }
+ )
const pwFindModal = () => {
setModalTitle("PW 찾기")
setModalBody(PwFindForm)
diff --git a/egovframe-template-simple-react-contribution/src/pages/login/IdFindForm.jsx b/egovframe-template-simple-react-contribution/src/pages/login/IdFindForm.jsx
index 66f8920..dfdcabf 100644
--- a/egovframe-template-simple-react-contribution/src/pages/login/IdFindForm.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/login/IdFindForm.jsx
@@ -1,17 +1,47 @@
+
+import * as EgovNet from "../../api/egovFetch";
+import CODE from "../../constants/code";
+
import Row from "react-bootstrap/Row";
import Col from "react-bootstrap/Col";
import Form from "react-bootstrap/Form";
import Button from "react-bootstrap/Button";
+import {setLocalItem} from "../../utils/storage";
+
function IdFindForm(){
+
+ const findId = (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ const form = e.currentTarget;
+ if(!form.email.value){
+ alert("이메일을 입력해주세요.")
+ }else{
+ EgovNet.requestFetch(
+ "/auth/findId",
+ {
+ method: "POST",
+ headers: {
+ 'Content-type': 'application/json'
+ },
+ body: JSON.stringify({email: form.email.value})
+ },
+ (resp) => {
+ alert(resp.resultMessage)
+ })
+ }
+ }
+
return (
-
이메일
-
+
+ 메일을 입력해주세요.
diff --git a/egovframe-template-simple-react-contribution/src/pages/login/PwFindForm.jsx b/egovframe-template-simple-react-contribution/src/pages/login/PwFindForm.jsx
index f4308f1..a1307c2 100644
--- a/egovframe-template-simple-react-contribution/src/pages/login/PwFindForm.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/login/PwFindForm.jsx
@@ -11,7 +11,7 @@ function PwFindForm(){
아이디
-
+
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/EgovLoginApiController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/EgovLoginApiController.java
index 6a4334d..3a17dc7 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/EgovLoginApiController.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/EgovLoginApiController.java
@@ -107,6 +107,31 @@ public class EgovLoginApiController extends BaseController {
return resultMap;
}
+ @Operation(
+ summary = "아이디 찾기",
+ description = "아이디 찾기",
+ tags = {"EgovLoginApiController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "300", description = "조회 실패")
+ })
+ @PostMapping(value = "/findId")
+ public HashMap findId(@RequestBody LoginVO loginVO) throws Exception {
+ HashMap resultMap = new HashMap();
+
+ String userId = loginService.selectEmail(loginVO);
+ if(userId!=null){
+ userId = userId.substring(0, userId.length()-3)+"***";
+ resultMap.put("resultCode", ResponseCode.SUCCESS.getCode());
+ resultMap.put("resultMessage", "아이디는 "+userId+" 입니다.");
+ }else{
+ resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
+ resultMap.put("resultMessage", "이메일 조회에 실패하였습니다.");
+ }
+ return resultMap;
+ }
+
@RequestMapping("/accessTokenRefresh")
public HashMap accessTokenRefresh(HttpServletRequest request, HttpServletResponse response, @AuthenticationPrincipal UserInfo loginVO){
HashMap resultMap = new HashMap<>();
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/repository/UserInfoRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/repository/UserInfoRepository.java
index 430bf6d..561c0fc 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/repository/UserInfoRepository.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/repository/UserInfoRepository.java
@@ -9,4 +9,5 @@ import java.util.Optional;
public interface UserInfoRepository extends JpaRepository {
Optional findByUserId(String userId);
+ Optional findByEmail(String email);
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/EgovLoginService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/EgovLoginService.java
index f1ec4d5..feb2b9e 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/EgovLoginService.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/EgovLoginService.java
@@ -50,4 +50,6 @@ public interface EgovLoginService {
public boolean searchPassword(LoginVO vo) throws Exception;
public Integer insertUser(LoginVO loginVO);
+
+ String selectEmail(LoginVO loginVO);
}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/impl/EgovLoginServiceImpl.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/impl/EgovLoginServiceImpl.java
index fc6208f..7760150 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/impl/EgovLoginServiceImpl.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/service/impl/EgovLoginServiceImpl.java
@@ -46,13 +46,25 @@ public class EgovLoginServiceImpl extends EgovAbstractServiceImpl implements Ego
@Transactional
public Integer insertUser(LoginVO loginVO){
- UserInfo info = new UserInfo();
- info.setUserId(loginVO.getId());
- info.setPassword(convertPassword(loginVO.getPassword()));
- info.setEmail(loginVO.getEmail());
- info.setUserSe("USR");
- userInfoRepository.save(info);
- return info.getUserSeq();
+ UserInfo savedUser = userInfoRepository.findByUserId(loginVO.getId()).orElse(null);
+ if(savedUser == null){
+ savedUser = userInfoRepository.findByEmail(loginVO.getEmail()).orElse(null);
+ if (savedUser == null){
+ UserInfo info = new UserInfo();
+ info.setUserId(loginVO.getId());
+ info.setPassword(convertPassword(loginVO.getPassword()));
+ info.setEmail(loginVO.getEmail());
+ info.setUserSe("USR");
+ userInfoRepository.save(info);
+ return info.getUserSeq();
+ }
+ }
+ return null;
+ }
+
+ public String selectEmail(LoginVO loginVO){
+ UserInfo savedUser = userInfoRepository.findByEmail(loginVO.getEmail()).orElse(null);
+ return savedUser==null?null:savedUser.getUserId();
}
@Override
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java
index 0f5213d..7cf7951 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java
@@ -60,10 +60,12 @@ public class SecurityConfig {
// 인증 예외 List
private String[] AUTH_WHITELIST = {
"/",
- "/auth/login",
"/login",
+ "/auth/login",
"/auth/accessTokenRefresh", // jwt accessToken 갱신
"/auth/join",//회원가입
+ "/auth/findId", // id 찾기
+ "/auth/findPw", // pw 찾기
"/cmm/main/**.do", // 메인페이지
"/cmm/fms/FileDown.do", //파일 다운로드
"/cmm/fms/getImage.do", //갤러리 이미지보기