From e20ac8bdbcac0d96135741833fb2af54980b450a Mon Sep 17 00:00:00 2001 From: Seonkyu_Kim Date: Wed, 26 Feb 2025 16:21:19 +0900 Subject: [PATCH] =?UTF-8?q?[=E2=9C=A8]=20=EC=82=AC=EC=9A=A9=EC=9E=90=20API?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84=20(=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8,=20=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83,=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program/Common/JWTToken/JwtTokenService.cs | 3 +- Program/V1/Controllers/UserController.cs | 114 ++++++++++----------- 2 files changed, 53 insertions(+), 64 deletions(-) diff --git a/Program/Common/JWTToken/JwtTokenService.cs b/Program/Common/JWTToken/JwtTokenService.cs index 250fc0e..0121aab 100644 --- a/Program/Common/JWTToken/JwtTokenService.cs +++ b/Program/Common/JWTToken/JwtTokenService.cs @@ -64,8 +64,7 @@ public class JwtTokenService { rng.GetBytes(randomNumber); } - - // return Convert.ToBase64String(randomNumber); + return new RefreshToken() { uid = uid, diff --git a/Program/V1/Controllers/UserController.cs b/Program/V1/Controllers/UserController.cs index bd5ccdb..a02aa97 100644 --- a/Program/V1/Controllers/UserController.cs +++ b/Program/V1/Controllers/UserController.cs @@ -40,7 +40,7 @@ public class UserController : ControllerBase [CustomOperation("회원 정보 조회", "회원 정보 조회", "사용자")] public IActionResult GetUserData(string uid) { - if (string.IsNullOrEmpty(uid)) return BadRequest(APIResponse.InvalidInputError); + if (string.IsNullOrEmpty(uid)) return BadRequest(APIResponse.InvalidInputError()); try { @@ -58,20 +58,11 @@ public class UserController : ControllerBase }) .FirstOrDefault(); - var response = new APIResponseStatus - { - status = new Status - { - code = "000", - message = "정상" - }, - data = user - }; - return Ok(response.JsonToString()); + return Ok(APIResponse.Send("000","정상",user)); } catch (Exception ex) { - return StatusCode(500, APIResponse.UnknownError); + return StatusCode(500, APIResponse.UnknownError()); } } @@ -81,7 +72,7 @@ public class UserController : ControllerBase { // API 동작 파라미터 입력 값 확인 if (string.IsNullOrEmpty(acctype) && string.IsNullOrEmpty(sns_id)) - return BadRequest(APIResponse.InvalidInputError); + return BadRequest(APIResponse.InvalidInputError()); try { @@ -109,32 +100,23 @@ public class UserController : ControllerBase await _repositoryService.SaveData(refreshToken, rt => rt.uid); - - var response = new APIResponseStatus + return Ok(APIResponse.Send("000","정상", new { - status = new Status - { - code = "000", - message = "정상" - }, - data = new - { - token = accessToken, - refresh = refreshToken.refresh_token - } - }; - return Ok(response.JsonToString()); + token = accessToken, + refresh = refreshToken.refresh_token + })); } } // case 1: Login 테이블에 값이 없다 == 로그인이 처음 // case 2: User 테이블에 값이 없다 == 이건 문제가 있는 상황 -> 해결은 회원가입 재 진행 시도 // Login에는 있는데 User 테이블에 없다? 말이 안되긴 하는데... - return Ok(APIResponse.Send("010", "로그인 정보가 없으므로 회원가입 진행",Empty)); + + return Ok(APIResponse.Send("001", "회원가입 진행: 로그인 정보가 없음",Empty)); } catch (Exception ex) { _logger.LogInformation($"[로그인][에러] : {ex}"); - return StatusCode(500, APIResponse.UnknownError); + return StatusCode(500, APIResponse.UnknownError()); } } @@ -146,8 +128,7 @@ public class UserController : ControllerBase if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(refresh)) { - var error = APIResponse.InvalidInputError; - return Ok(error); + return BadRequest(APIResponse.InvalidInputError()); } try @@ -175,17 +156,17 @@ public class UserController : ControllerBase catch (TokenException tokenEx) { _logger.LogInformation($"[로그인] : {tokenEx}"); - return StatusCode(500, APIResponse.InvalidInputError); + return Ok(APIResponse.Send("001", "로그인 진행: 토큰에 문제가 있음",Empty)); } catch (RefreshRevokeException refreshEx) { _logger.LogInformation($"[로그인] : {refreshEx}"); - return StatusCode(500, APIResponse.InvalidInputError); + return Ok(APIResponse.Send("001", "로그인 진행: 리프레시 토큰 폐기",Empty)); } catch (Exception ex) { _logger.LogInformation($"[로그인][에러] : {ex}"); - return StatusCode(500, APIResponse.UnknownError); + return StatusCode(500, APIResponse.UnknownError()); } } @@ -194,10 +175,10 @@ public class UserController : ControllerBase [CustomOperation("회원 가입", "사용자 회원 가입", "사용자")] public async Task UserRegister([FromBody] UserAll request) { - if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError); + if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError()); - var atIndext = request.email.IndexOf('@'); - var localPartEmail = request.email.Substring(0, atIndext); + var atIndex = request.email.IndexOf('@'); + var localPartEmail = request.email.Substring(0, atIndex); var uid = $"AM{localPartEmail}{DateTime.Now:yyyyMMdd}"; var user = new User @@ -246,42 +227,51 @@ public class UserController : ControllerBase } // TO-DO: jwt 토큰 만들어서 여기서 보내는 작업을 해야 함 - var token = _jwtTokenService.GenerateJwtToken(uid);//, "admin"); + var token = _jwtTokenService.GenerateJwtToken(uid); var refreshToken = _jwtTokenService.GenerateRefreshToken(uid); await _repositoryService.SaveData(refreshToken, rt => rt.uid); - var result = new APIResponseStatus() + return Ok(APIResponse.Send("000","정상",new { - status = new Status() - { - code = "000", - message = "정상" - }, - data = new - { - accessToken = token, - refreshToken = refreshToken.refresh_token - } - }; - - return Ok(result.JsonToString()); + accessToken = token, + refreshToken = refreshToken.refresh_token + })); } [HttpGet("logout")] [CustomOperation("로그아웃", "사용자 로그아웃", "사용자")] - public async Task LogOut(string token, string refresh) //([FromBody] UserAll request) + public async Task Logout(string token, string refresh) //([FromBody] UserAll request) { - // 로그아웃 하면 리프래시 토큰 만료 하는걸 넣어야 함 - /* */ - var value = await _repositoryService.ValidateToken(token, refresh); + if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(refresh)) return BadRequest(APIResponse.InvalidInputError()); - // _logger.LogInformation(value.uid); - // _logger.LogInformation(value.refresh); - // _logger.LogInformation(value.token); - /* */ + try + { + var validateToken = await _repositoryService.ValidateToken(token, refresh); + var refreshToken = await _dbContext.RefreshTokens.FirstOrDefaultAsync(r => r.uid == validateToken.uid); + if (refreshToken != null) + { + refreshToken.revoke_Date = DateTime.Now; + await _repositoryService.SaveData(refreshToken, rt => rt.uid); + return Ok(APIResponse.Send("000", "로그아웃 정상", Empty)); + } + else + { + return Ok(APIResponse.Send("000", "로그아웃 정상", Empty)); + } + } + catch (TokenException tokenEx) + { + return Ok(APIResponse.Send("101", "입력 받은 토큰의 문제", Empty)); + } + catch (RefreshRevokeException refreshEx) + { + return Ok(APIResponse.Send("102", "폐기된 리프레시 토큰", Empty)); + } + catch (Exception ex) + { + return StatusCode(500, APIResponse.UnknownError()); + } - - return Ok("로그아웃"); }