Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] 비밀번호 찾기 기능을 위한 사용자 인증 체계 구현 #94

Merged
merged 8 commits into from
Nov 20, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,15 @@ public ResponseEntity<?> signUp(@RequestBody SignUpRequestDto request) {
return ResponseEntity.ok().body(new SuccessResponseDto("회원가입이 완료되었습니다."));
}

@PostMapping("/check-user")
public ResponseEntity<?> checkUser(@RequestBody Map<String, String> request) {
String email = request.get("email");
List<String> groups = authService.getUserGroups(email);

Map<String, Object> response = new HashMap<>();
response.put("groups", groups);

return ResponseEntity.ok(response);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -226,4 +226,27 @@ private void createNewUser(String email) {
}
}

public List<String> getUserGroups(String email) {
try {
UserType user = findUserByEmail(email, true); // 이미 구현된 메소드 활용

AdminListGroupsForUserRequest groupsRequest = AdminListGroupsForUserRequest.builder()
.userPoolId(userPoolId)
.username(user.username())
.build();

AdminListGroupsForUserResponse groupsResponse = cognitoClient.adminListGroupsForUser(groupsRequest);

return groupsResponse.groups().stream()
.map(GroupType::groupName)
.toList();

} catch (UserNotFoundException e) {
throw new AuthUserNotFoundException();
} catch (Exception e) {
log.error("Failed to get user groups", e);
throw new AuthenticationException(ErrorCode.INTERNAL_SERVER_ERROR);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
"/api/auth/signup",
"/api/auth/send-verification",
"/api/auth/verify-code",
"/api/auth/resend-verification"
"/api/auth/resend-verification",
"/api/auth/check-user"
).permitAll()
// 기존 역할 기반 접근 제어
.requestMatchers("/api/instructor/**").hasRole("INSTRUCTOR")
Expand Down
30 changes: 25 additions & 5 deletions src/main/java/com/example/epari/global/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,35 @@ public enum ErrorCode {
INVALID_INPUT(HttpStatus.BAD_REQUEST, "CMM-004", "입력값이 올바르지 않습니다."),

// 인증, 인가 관련 에러 코드 (AUTH)
// 기본 인증 관련
UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "AUTH-001", "인증이 필요한 요청입니다."),
FORBIDDEN(HttpStatus.FORBIDDEN, "AUTH-002", "해당 리소스에 대한 접근 권한이 없습니다."),

// 사용자 상태 관련
USER_NOT_FOUND(HttpStatus.NOT_FOUND, "AUTH-003", "사용자를 찾을 수 없습니다."),
USER_ALREADY_EXISTS(HttpStatus.CONFLICT, "AUTH-004", "이미 가입된 이메일입니다."),
INVALID_VERIFICATION_CODE(HttpStatus.BAD_REQUEST, "AUTH-005", "잘못된 인증 코드입니다. 다시 시도해주세요."),
VERIFICATION_CODE_EXPIRED(HttpStatus.BAD_REQUEST, "AUTH-006", "만료된 인증 코드입니다. 코드를 재발송 해주세요."),
SIGNUP_FAILED(HttpStatus.BAD_REQUEST, "AUTH-007", "회원가입 처리 중 오류가 발생했습니다."),
PENDING_APPROVAL(HttpStatus.BAD_REQUEST, "AUTH-008", "가입 승인 대기중입니다."),
VERIFICATION_CODE_LIMIT_EXCEEDED(HttpStatus.TOO_MANY_REQUESTS, "AUTH-009", "잠시 후 다시 시도해주세요."),
USER_NOT_CONFIRMED(HttpStatus.BAD_REQUEST, "AUTH-005", "이메일 인증이 완료되지 않은 사용자입니다."),
USER_STATUS_INVALID(HttpStatus.BAD_REQUEST, "AUTH-006", "비밀번호를 재설정할 수 없는 사용자 상태입니다."),
INVALID_USER_STATUS(HttpStatus.BAD_REQUEST, "AUTH-007", "유효하지 않은 사용자 상태입니다."),

// 인증 코드 관련
INVALID_VERIFICATION_CODE(HttpStatus.BAD_REQUEST, "AUTH-008", "잘못된 인증 코드입니다. 다시 시도해주세요."),
VERIFICATION_CODE_EXPIRED(HttpStatus.BAD_REQUEST, "AUTH-009", "만료된 인증 코드입니다. 코드를 재발송 해주세요."),
VERIFICATION_CODE_LIMIT_EXCEEDED(HttpStatus.TOO_MANY_REQUESTS, "AUTH-010", "잠시 후 다시 시도해주세요."),

// 비밀번호 관련
INVALID_PASSWORD_RESET_REQUEST(HttpStatus.BAD_REQUEST, "AUTH-011", "유효하지 않은 비밀번호 재설정 요청입니다."),
PASSWORD_RESET_CODE_MISMATCH(HttpStatus.BAD_REQUEST, "AUTH-012", "잘못된 비밀번호 재설정 코드입니다."),
PASSWORD_RESET_CODE_EXPIRED(HttpStatus.BAD_REQUEST, "AUTH-013", "만료된 비밀번호 재설정 코드입니다. 코드를 재발송 해주세요."),
INVALID_PASSWORD_FORMAT(HttpStatus.BAD_REQUEST, "AUTH-014", "비밀번호 형식이 올바르지 않습니다."),
INVALID_PASSWORD(HttpStatus.BAD_REQUEST, "AUTH-015", "유효하지 않은 비밀번호입니다."),
RESET_REQUIRED_PASSWORD(HttpStatus.BAD_REQUEST, "AUTH-016", "비밀번호 재설정이 필요한 상태입니다."),

// 요청 제한/오류 관련
TOO_MANY_REQUESTS(HttpStatus.TOO_MANY_REQUESTS, "AUTH-017", "너무 많은 요청이 발생했습니다. 잠시 후 다시 시도해주세요."),
INVALID_PARAMETER(HttpStatus.BAD_REQUEST, "AUTH-018", "잘못된 파라미터가 전달되었습니다."),
SIGNUP_FAILED(HttpStatus.BAD_REQUEST, "AUTH-019", "회원가입 처리 중 오류가 발생했습니다."),
PENDING_APPROVAL(HttpStatus.BAD_REQUEST, "AUTH-020", "가입 승인 대기중입니다."),

// Student 관련 에러 코드(ST
STUDENT_NOT_FOUND(HttpStatus.NOT_FOUND, "STD-001", "학생 정보를 찾을 수 없습니다."),
Expand Down
Loading