[] 사용자 API 로직 구현 (로그인, 로그아웃, 회원가입)

This commit is contained in:
김선규 2025-02-26 16:21:19 +09:00
parent 47f3b30010
commit e20ac8bdbc
2 changed files with 53 additions and 64 deletions

View File

@ -65,7 +65,6 @@ public class JwtTokenService
rng.GetBytes(randomNumber); rng.GetBytes(randomNumber);
} }
// return Convert.ToBase64String(randomNumber);
return new RefreshToken() return new RefreshToken()
{ {
uid = uid, uid = uid,

View File

@ -40,7 +40,7 @@ public class UserController : ControllerBase
[CustomOperation("회원 정보 조회", "회원 정보 조회", "사용자")] [CustomOperation("회원 정보 조회", "회원 정보 조회", "사용자")]
public IActionResult GetUserData(string uid) public IActionResult GetUserData(string uid)
{ {
if (string.IsNullOrEmpty(uid)) return BadRequest(APIResponse.InvalidInputError); if (string.IsNullOrEmpty(uid)) return BadRequest(APIResponse.InvalidInputError());
try try
{ {
@ -58,20 +58,11 @@ public class UserController : ControllerBase
}) })
.FirstOrDefault(); .FirstOrDefault();
var response = new APIResponseStatus<User> return Ok(APIResponse.Send("000","정상",user));
{
status = new Status
{
code = "000",
message = "정상"
},
data = user
};
return Ok(response.JsonToString());
} }
catch (Exception ex) catch (Exception ex)
{ {
return StatusCode(500, APIResponse.UnknownError); return StatusCode(500, APIResponse.UnknownError());
} }
} }
@ -81,7 +72,7 @@ public class UserController : ControllerBase
{ {
// API 동작 파라미터 입력 값 확인 // API 동작 파라미터 입력 값 확인
if (string.IsNullOrEmpty(acctype) && string.IsNullOrEmpty(sns_id)) if (string.IsNullOrEmpty(acctype) && string.IsNullOrEmpty(sns_id))
return BadRequest(APIResponse.InvalidInputError); return BadRequest(APIResponse.InvalidInputError());
try try
{ {
@ -109,32 +100,23 @@ public class UserController : ControllerBase
await _repositoryService.SaveData<RefreshToken, string>(refreshToken, rt => rt.uid); await _repositoryService.SaveData<RefreshToken, string>(refreshToken, rt => rt.uid);
return Ok(APIResponse.Send("000","정상", new
var response = new APIResponseStatus<dynamic>
{
status = new Status
{
code = "000",
message = "정상"
},
data = new
{ {
token = accessToken, token = accessToken,
refresh = refreshToken.refresh_token refresh = refreshToken.refresh_token
} }));
};
return Ok(response.JsonToString());
} }
} }
// case 1: Login 테이블에 값이 없다 == 로그인이 처음 // case 1: Login 테이블에 값이 없다 == 로그인이 처음
// case 2: User 테이블에 값이 없다 == 이건 문제가 있는 상황 -> 해결은 회원가입 재 진행 시도 // case 2: User 테이블에 값이 없다 == 이건 문제가 있는 상황 -> 해결은 회원가입 재 진행 시도
// Login에는 있는데 User 테이블에 없다? 말이 안되긴 하는데... // Login에는 있는데 User 테이블에 없다? 말이 안되긴 하는데...
return Ok(APIResponse.Send("010", "로그인 정보가 없으므로 회원가입 진행",Empty));
return Ok(APIResponse.Send("001", "회원가입 진행: 로그인 정보가 없음",Empty));
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogInformation($"[로그인][에러] : {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)) if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(refresh))
{ {
var error = APIResponse.InvalidInputError; return BadRequest(APIResponse.InvalidInputError());
return Ok(error);
} }
try try
@ -175,17 +156,17 @@ public class UserController : ControllerBase
catch (TokenException tokenEx) catch (TokenException tokenEx)
{ {
_logger.LogInformation($"[로그인] : {tokenEx}"); _logger.LogInformation($"[로그인] : {tokenEx}");
return StatusCode(500, APIResponse.InvalidInputError); return Ok(APIResponse.Send("001", "로그인 진행: 토큰에 문제가 있음",Empty));
} }
catch (RefreshRevokeException refreshEx) catch (RefreshRevokeException refreshEx)
{ {
_logger.LogInformation($"[로그인] : {refreshEx}"); _logger.LogInformation($"[로그인] : {refreshEx}");
return StatusCode(500, APIResponse.InvalidInputError); return Ok(APIResponse.Send("001", "로그인 진행: 리프레시 토큰 폐기",Empty));
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogInformation($"[로그인][에러] : {ex}"); _logger.LogInformation($"[로그인][에러] : {ex}");
return StatusCode(500, APIResponse.UnknownError); return StatusCode(500, APIResponse.UnknownError());
} }
} }
@ -194,10 +175,10 @@ public class UserController : ControllerBase
[CustomOperation("회원 가입", "사용자 회원 가입", "사용자")] [CustomOperation("회원 가입", "사용자 회원 가입", "사용자")]
public async Task<IActionResult> UserRegister([FromBody] UserAll request) public async Task<IActionResult> UserRegister([FromBody] UserAll request)
{ {
if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError); if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError());
var atIndext = request.email.IndexOf('@'); var atIndex = request.email.IndexOf('@');
var localPartEmail = request.email.Substring(0, atIndext); var localPartEmail = request.email.Substring(0, atIndex);
var uid = $"AM{localPartEmail}{DateTime.Now:yyyyMMdd}"; var uid = $"AM{localPartEmail}{DateTime.Now:yyyyMMdd}";
var user = new User var user = new User
@ -246,42 +227,51 @@ public class UserController : ControllerBase
} }
// TO-DO: jwt 토큰 만들어서 여기서 보내는 작업을 해야 함 // TO-DO: jwt 토큰 만들어서 여기서 보내는 작업을 해야 함
var token = _jwtTokenService.GenerateJwtToken(uid);//, "admin"); var token = _jwtTokenService.GenerateJwtToken(uid);
var refreshToken = _jwtTokenService.GenerateRefreshToken(uid); var refreshToken = _jwtTokenService.GenerateRefreshToken(uid);
await _repositoryService.SaveData<RefreshToken, string>(refreshToken, rt => rt.uid); await _repositoryService.SaveData<RefreshToken, string>(refreshToken, rt => rt.uid);
var result = new APIResponseStatus<dynamic>() return Ok(APIResponse.Send("000","정상",new
{
status = new Status()
{
code = "000",
message = "정상"
},
data = new
{ {
accessToken = token, accessToken = token,
refreshToken = refreshToken.refresh_token refreshToken = refreshToken.refresh_token
} }));
};
return Ok(result.JsonToString());
} }
[HttpGet("logout")] [HttpGet("logout")]
[CustomOperation("로그아웃", "사용자 로그아웃", "사용자")] [CustomOperation("로그아웃", "사용자 로그아웃", "사용자")]
public async Task<IActionResult> LogOut(string token, string refresh) //([FromBody] UserAll request) public async Task<IActionResult> Logout(string token, string refresh) //([FromBody] UserAll request)
{ {
// 로그아웃 하면 리프래시 토큰 만료 하는걸 넣어야 함 if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(refresh)) return BadRequest(APIResponse.InvalidInputError());
/* */
var value = await _repositoryService.ValidateToken(token, refresh);
// _logger.LogInformation(value.uid); try
// _logger.LogInformation(value.refresh); {
// _logger.LogInformation(value.token); 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, string>(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("로그아웃");
} }