From f37951368196ddf2a787618b09d4eb8d8aa1ee59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=84=9D=20=EC=B5=9C?= Date: Wed, 27 Dec 2023 16:46:10 +0900 Subject: [PATCH] =?UTF-8?q?id=20=EC=B0=BE=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/login/EgovLoginContent.jsx | 30 ++++++++-------- .../src/pages/login/IdFindForm.jsx | 34 +++++++++++++++++-- .../src/pages/login/PwFindForm.jsx | 2 +- .../auth/EgovLoginApiController.java | 25 ++++++++++++++ .../auth/repository/UserInfoRepository.java | 1 + .../auth/service/EgovLoginService.java | 2 ++ .../service/impl/EgovLoginServiceImpl.java | 26 ++++++++++---- .../config/security/SecurityConfig.java | 4 ++- 8 files changed, 99 insertions(+), 25 deletions(-) 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", //갤러리 이미지보기