[BE] Sisc1-209 구글 로그인 시 유저 없을 시 유저 생성 로직 추가#113
Conversation
…m/SISC-IT/sisc-web into SISC1-209-BE-redirect-url-프론트로-전달
주요 변경 사항이 풀 리퀘스트는 OAuth2 및 OIDC 인증 처리를 개선하여 데이터베이스에서 사용자 정보를 조회하고, 새로운 OIDC 사용자 서비스를 추가하며, 쿠키 보안 설정을 조정합니다. 변경 사항
시퀀스 다이어그램sequenceDiagram
participant User
participant OIDC as OIDC Provider<br/>(Google)
participant CustomOidcUserService
participant UserRepository
participant UserOauthAccountRepository
participant SecurityContext
User->>OIDC: 로그인 요청
OIDC-->>User: OIDC 클레임 반환
User->>CustomOidcUserService: loadUser(OidcUserRequest)
rect rgb(200, 220, 255)
Note over CustomOidcUserService: OIDC 클레임에서 사용자 정보 추출
CustomOidcUserService->>UserRepository: findByEmail() 조회
alt 사용자 미존재
CustomOidcUserService->>UserRepository: 새 User 생성<br/>(email, name, TEAM_MEMBER)
CustomOidcUserService->>UserOauthAccountRepository: UserOauthAccount 생성<br/>(provider=GOOGLE, providerUid=sub)
end
end
rect rgb(220, 240, 220)
Note over CustomOidcUserService: 속성 강화 및 DefaultOidcUser 반환
CustomOidcUserService->>CustomOidcUserService: 속성에 userId, provider, email 추가
CustomOidcUserService->>SecurityContext: OidcUser 반환
end
SecurityContext-->>User: 인증 완료
코드 리뷰 난이도 평가🎯 3 (중간) | ⏱️ ~20-25분 추가 검토 영역:
관련 가능성 있는 풀 리퀘스트
추천 리뷰어
시
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
backend/src/main/java/org/sejongisc/backend/common/auth/config/OAuth2SuccessHandler.java (1)
98-112: OAuth2SuccessHandler의 쿠키 보안 설정을 프로덕션 환경에 맞게 수정하세요.검증 결과, OAuth2SuccessHandler.java의 쿠키 설정(lines 98-112)이 로컬 개발용 값(
secure(false),sameSite("Lax"))으로 하드코딩되어 있어 프로덕션에 배포될 경우 보안 위험이 발생합니다.같은 프로젝트의 AuthController.java(lines 132-138, 195-201, 267-273, 324-330)는
secure(true),sameSite("None")으로 설정되어 있으므로, OAuth2SuccessHandler도 AuthController와 동일한 프로덕션 설정을 적용해야 합니다.수정 필요 부분 (lines 98-112):
ResponseCookie accessCookie = ResponseCookie.from("access", accessToken) .httpOnly(true) .secure(true) // 프로덕션용으로 변경 .sameSite("None") // 프로덕션용으로 변경 .path("/") .maxAge(60L * 60) .build(); ResponseCookie refreshCookie = ResponseCookie.from("refresh", refreshToken) .httpOnly(true) .secure(true) // 프로덕션용으로 변경 .sameSite("None") // 프로덕션용으로 변경 .path("/") .maxAge(60L * 60 * 24 * 14) .build();
♻️ Duplicate comments (1)
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOidcUserService.java (1)
49-71: 코드 중복에 대한 참고 사항.이 사용자 생성/조회 로직은
CustomOAuth2UserService.java의 85-104번 줄과 중복됩니다.CustomOAuth2UserService.java에 대한 리뷰 댓글에서 이미 리팩토링을 제안했으니 참고해 주세요.
🧹 Nitpick comments (4)
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOAuth2UserService.java (2)
82-82: 사용하지 않는 변수를 제거하세요.
fName변수가 선언되었지만 메서드 내에서 사용되지 않습니다.다음 diff를 적용하여 사용하지 않는 변수를 제거하세요:
final String fProviderUid = providerUid; final String fEmail = email; -final String fName = name; final AuthProvider fAuthProvider = AuthProvider.valueOf(provider.toUpperCase());
85-104: CustomOidcUserService와 코드 중복을 제거하는 것을 고려하세요.이 사용자 생성/조회 로직은
CustomOidcUserService.java의 49-71번 줄과 거의 동일합니다. 공통 메서드로 추출하여 DRY 원칙을 준수하는 것이 좋습니다.예를 들어, 다음과 같은 공통 유틸리티 메서드를 생성할 수 있습니다:
private User findOrCreateUser(AuthProvider provider, String providerUid, String email, String name) { return oauthAccountRepository .findByProviderAndProviderUid(provider, providerUid) .map(UserOauthAccount::getUser) .orElseGet(() -> { User newUser = User.builder() .email(email) .name(name) .role(Role.TEAM_MEMBER) .build(); User saved = userRepository.save(newUser); UserOauthAccount oauth = UserOauthAccount.builder() .user(saved) .provider(provider) .providerUid(providerUid) .build(); oauthAccountRepository.save(oauth); return saved; }); }그런 다음 두 서비스 모두 이 메서드를 재사용할 수 있습니다.
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOidcUserService.java (2)
40-40: 주석 처리된 로그의 일관성을 개선하세요.40번 줄의 주석 처리된 로그에
//앞에 공백이 있습니다. 코드베이스 전체에서 일관된 주석 스타일을 유지하는 것이 좋습니다. 파일의 다른 주석 처리된 로그(35번 줄)와 일치시켜 주세요.- // log.info("OIDC claims: {}", original); + // log.info("OIDC claims: {}", original);
69-69: 주석 처리된 로그의 일관성을 개선하세요.69번 줄의 주석 처리된 로그에도
//앞에 공백이 있습니다. 일관성을 위해 들여쓰기를 수정해 주세요.- // log.info("[CustomOidcUserService] 신규 User 및 UserOauthAccount 생성됨"); + // log.info("[CustomOidcUserService] 신규 User 및 UserOauthAccount 생성됨");
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOAuth2UserService.java(4 hunks)backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOidcUserService.java(3 hunks)backend/src/main/java/org/sejongisc/backend/common/auth/config/OAuth2SuccessHandler.java(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOidcUserService.java (2)
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOAuth2UserService.java (1)
Slf4j(25-122)backend/src/main/java/org/sejongisc/backend/common/auth/config/OAuth2SuccessHandler.java (1)
Slf4j(32-129)
🔇 Additional comments (1)
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOidcUserService.java (1)
81-91: 익명 서브클래스 패턴이 적절하게 사용되었습니다.
getAttributes()메서드를 재정의하기 위해 익명 서브클래스를 사용한 것은 커스텀 attributes를DefaultOidcUser에 주입하기 위한 유효한 접근 방식입니다. 이 패턴은 OIDC 사용자의 attributes를 OAuth2SuccessHandler에 전달하는 데 효과적입니다.
| // log.info("[CustomOAuth2UserService] loadUser START"); | ||
| ======= | ||
There was a problem hiding this comment.
병합 충돌 마커를 제거하세요.
37-39번 줄에 주석 처리된 로그와 함께 "=======" 구분자가 남아 있습니다. 이는 병합 충돌 마커처럼 보이며 프로덕션 코드에 포함되어서는 안 됩니다.
다음 diff를 적용하여 불필요한 구분자를 제거하세요:
- // log.info("[CustomOAuth2UserService] loadUser START");
-=======
-
+ // log.info("[CustomOAuth2UserService] loadUser START");📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // log.info("[CustomOAuth2UserService] loadUser START"); | |
| ======= | |
| // log.info("[CustomOAuth2UserService] loadUser START"); |
🤖 Prompt for AI Agents
backend/src/main/java/org/sejongisc/backend/common/auth/config/CustomOAuth2UserService.java
lines 37-39: remove the leftover merge conflict marker ("=======") and any
surrounding conflict artifacts so the file contains only the intended code or
comment (you may keep or restore the commented log line but must delete the
"=======" line); ensure no other conflict markers remain and the file compiles
cleanly.
Summary by CodeRabbit
릴리스 노트
새로운 기능
개선 사항