forked from AcaMate/AcaMate_API
[✨] 사용자 API 로직 구현 (로그인, 로그아웃, 회원가입)
This commit is contained in:
parent
47f3b30010
commit
e20ac8bdbc
|
@ -64,8 +64,7 @@ public class JwtTokenService
|
|||
{
|
||||
rng.GetBytes(randomNumber);
|
||||
}
|
||||
|
||||
// return Convert.ToBase64String(randomNumber);
|
||||
|
||||
return new RefreshToken()
|
||||
{
|
||||
uid = uid,
|
||||
|
|
|
@ -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<User>
|
||||
{
|
||||
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, string>(refreshToken, rt => rt.uid);
|
||||
|
||||
|
||||
var response = new APIResponseStatus<dynamic>
|
||||
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<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 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, 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,
|
||||
refreshToken = refreshToken.refresh_token
|
||||
}
|
||||
};
|
||||
|
||||
return Ok(result.JsonToString());
|
||||
accessToken = token,
|
||||
refreshToken = refreshToken.refresh_token
|
||||
}));
|
||||
}
|
||||
|
||||
[HttpGet("logout")]
|
||||
[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)
|
||||
{
|
||||
// 로그아웃 하면 리프래시 토큰 만료 하는걸 넣어야 함
|
||||
/* */
|
||||
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, 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("로그아웃");
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user