From 0729ef124e61a7cc1258a055aa88026a5946b3d0 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Mon, 4 Dec 2023 13:25:48 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=B2=98=EC=9D=8C=20=EC=86=8C?= =?UTF-8?q?=EC=85=9C=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B0=80=EC=9E=85?= =?UTF-8?q?=EC=8B=9C=20=EA=B6=8C=ED=95=9C=EC=9D=84=20GUEST=EB=A1=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=ED=95=98=EA=B3=A0=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=ED=8F=BC=EC=9C=BC=EB=A1=9C=20=EB=A6=AC?= =?UTF-8?q?=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uspray/uspray/Enums/Authority.java | 2 +- .../client/oauth2/CustomOAuth2UserService.java | 5 +---- .../client/oauth2/OAuth2LoginSuccessHandler.java | 11 +++++++++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/uspray/uspray/Enums/Authority.java b/src/main/java/com/uspray/uspray/Enums/Authority.java index 9b828b17..5c667968 100644 --- a/src/main/java/com/uspray/uspray/Enums/Authority.java +++ b/src/main/java/com/uspray/uspray/Enums/Authority.java @@ -1,5 +1,5 @@ package com.uspray.uspray.Enums; public enum Authority { - ROLE_USER, ROLE_ADMIN + ROLE_USER, ROLE_ADMIN, ROLE_GUEST } \ No newline at end of file diff --git a/src/main/java/com/uspray/uspray/external/client/oauth2/CustomOAuth2UserService.java b/src/main/java/com/uspray/uspray/external/client/oauth2/CustomOAuth2UserService.java index ce9c3fa6..4b2ecf1f 100644 --- a/src/main/java/com/uspray/uspray/external/client/oauth2/CustomOAuth2UserService.java +++ b/src/main/java/com/uspray/uspray/external/client/oauth2/CustomOAuth2UserService.java @@ -74,16 +74,13 @@ private Member getMember(OAuthAttributes attributes) { * 처음 가입하는 회원이라면 Member 테이블을 생성합니다. (소셜 회원가입) **/ private Member saveMember(OAuthAttributes attributes, String userId) { - //기존 유저와 아이디가 같으면 같은 유저임 - // update는 기존 유저의 소셜 ID 컬럼에 값을 추가하는 것 정도만 있으면 될듯 Member member = memberRepository.getMemberByUserId(userId); member.changeSocialId(attributes.getOAuth2UserInfo().getId()); return memberRepository.save(member); } + //처음 가입 private Member saveMember(OAuthAttributes attributes) { - //기존 유저와 아이디가 같으면 같은 유저임 - // update는 기존 유저의 소셜 ID 컬럼에 값을 추가하는 것 정도만 있으면 될듯 Member member = attributes.toEntity(attributes.getOAuth2UserInfo(), generateRandomId()); return memberRepository.save(member); } diff --git a/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java b/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java index aef6bf58..916e20da 100644 --- a/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java +++ b/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.uspray.uspray.DTO.ApiResponseDto; import com.uspray.uspray.DTO.auth.TokenDto; +import com.uspray.uspray.Enums.Authority; import com.uspray.uspray.exception.SuccessStatus; import com.uspray.uspray.jwt.TokenProvider; import java.io.IOException; @@ -32,6 +33,16 @@ public class OAuth2LoginSuccessHandler implements AuthenticationSuccessHandler { public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + CustomOAuth2User customOAuth2User = (CustomOAuth2User) authentication.getPrincipal(); + + // User의 Role이 GUEST일 경우 처음 요청한 회원이므로 회원가입 페이지로 리다이렉트 + if(customOAuth2User.getAuthority() == Authority.ROLE_GUEST) { + String accessToken = tokenProvider.generateTokenDto(authentication).getAccessToken(); + response.addHeader("Authorization", "Bearer " + accessToken); + response.sendRedirect("/name-form"); // 프론트의 회원가입 추가 정보 입력 폼으로 리다이렉트 (추가 컨트롤러를 만들고 거기서 post 해야지 User로 바뀜) + return; + } + TokenDto tokenDto = tokenProvider.generateTokenDto(authentication); redisTemplate.opsForValue().set("RT:" + authentication.getName(), tokenDto.getRefreshToken(), From b6da4e19c59e148ce5d8c29bb06b59d2128e9072 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Mon, 4 Dec 2023 13:26:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A6=84=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B6=8C=ED=95=9C=20=EB=B3=80=EA=B2=BD=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/uspray/uspray/controller/MemberController.java | 10 ++++++++++ src/main/java/com/uspray/uspray/domain/Member.java | 7 +++++++ .../com/uspray/uspray/exception/SuccessStatus.java | 1 + .../java/com/uspray/uspray/service/MemberService.java | 9 +++++++++ 4 files changed, 27 insertions(+) diff --git a/src/main/java/com/uspray/uspray/controller/MemberController.java b/src/main/java/com/uspray/uspray/controller/MemberController.java index 66d25058..120a9e82 100644 --- a/src/main/java/com/uspray/uspray/controller/MemberController.java +++ b/src/main/java/com/uspray/uspray/controller/MemberController.java @@ -14,6 +14,7 @@ import org.springframework.security.core.userdetails.User; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -44,4 +45,13 @@ public ApiResponseDto setNotificationAgree( memberService.changeNotificationAgree(user.getUsername(), notificationAgreeDto); return ApiResponseDto.success(SuccessStatus.CHANGE_PUSH_AGREE_SUCCESS); } + + @PutMapping("/oauth/{name}") + @Operation(summary = "소셜 로그인 회원가입 이름 설정") + public ApiResponseDto setOAuthName( + @Parameter(hidden = true) @AuthenticationPrincipal User user, + @PathVariable("name") String name) { + memberService.changeName(user.getUsername(), name); + return ApiResponseDto.success(SuccessStatus.CHANGE_NAME_SUCCESS); + } } diff --git a/src/main/java/com/uspray/uspray/domain/Member.java b/src/main/java/com/uspray/uspray/domain/Member.java index 81bb046b..91251786 100644 --- a/src/main/java/com/uspray/uspray/domain/Member.java +++ b/src/main/java/com/uspray/uspray/domain/Member.java @@ -71,6 +71,13 @@ public void changeFirebaseToken(String firebaseToken) { public void changePhone(String phone) { this.phone = phone; } + public void changeName(String name) { + this.name = name; + } + + public void changeAuthority(Authority authority) { + this.authority = authority; + } public void changePw(String pw) { this.password = pw; diff --git a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java index 8a260318..1aa5c2e7 100644 --- a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java +++ b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java @@ -26,6 +26,7 @@ public enum SuccessStatus { REISSUE_SUCCESS(HttpStatus.OK, "토큰 재발급에 성공했습니다."), PUSH_SUCCESS(HttpStatus.OK, "푸쉬 알림을 성공적으로 전송했습니다."), CHANGE_PUSH_AGREE_SUCCESS(HttpStatus.OK, "푸쉬 알림 설정을 성공적으로 변경했습니다."), + CHANGE_NAME_SUCCESS(HttpStatus.OK, "이름을 성공적으로 변경했습니다."), UPDATE_CATEGORY_SUCCESS(HttpStatus.OK, "카테고리 수정에 성공했습니다."), GET_CATEGORY_SUCCESS(HttpStatus.OK, "카테고리 조회에 성공했습니다."), GET_HISTORY_LIST_SUCCESS(HttpStatus.OK, "히스토리 목록 조회에 성공했습니다."), diff --git a/src/main/java/com/uspray/uspray/service/MemberService.java b/src/main/java/com/uspray/uspray/service/MemberService.java index a18bf0e7..dd32e306 100644 --- a/src/main/java/com/uspray/uspray/service/MemberService.java +++ b/src/main/java/com/uspray/uspray/service/MemberService.java @@ -1,6 +1,8 @@ package com.uspray.uspray.service; import com.uspray.uspray.DTO.notification.NotificationAgreeDto; +import com.uspray.uspray.Enums.Authority; +import com.uspray.uspray.domain.Member; import com.uspray.uspray.infrastructure.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -21,4 +23,11 @@ public void changePhone(String userId, String phone) { public void changeNotificationAgree(String userId, NotificationAgreeDto notificationAgreeDto) { memberRepository.getMemberByUserId(userId).changeNotificationSetting(notificationAgreeDto); } + + @Transactional + public void changeName(String userId, String name) { + Member member = memberRepository.getMemberByUserId(userId); + member.changeName(name); + member.changeAuthority(Authority.ROLE_USER); + } } From 7805e1bf9cc392b792afd3b69f74250708ccb43f Mon Sep 17 00:00:00 2001 From: dong2ast Date: Tue, 5 Dec 2023 13:09:29 +0900 Subject: [PATCH 3/3] =?UTF-8?q?add:=20=EC=86=8C=EC=85=9C=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EB=A6=AC=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8=20url?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../external/client/oauth2/OAuth2LoginSuccessHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java b/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java index 916e20da..f60aee08 100644 --- a/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java +++ b/src/main/java/com/uspray/uspray/external/client/oauth2/OAuth2LoginSuccessHandler.java @@ -39,7 +39,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo if(customOAuth2User.getAuthority() == Authority.ROLE_GUEST) { String accessToken = tokenProvider.generateTokenDto(authentication).getAccessToken(); response.addHeader("Authorization", "Bearer " + accessToken); - response.sendRedirect("/name-form"); // 프론트의 회원가입 추가 정보 입력 폼으로 리다이렉트 (추가 컨트롤러를 만들고 거기서 post 해야지 User로 바뀜) + response.sendRedirect("/socialLoginNameInput"); // 프론트의 회원가입 추가 정보 입력 폼으로 리다이렉트 (추가 컨트롤러를 만들고 거기서 post 해야지 User로 바뀜) return; }