From baecd26a2c6310ba61650d5d9701a91fd8b9410c Mon Sep 17 00:00:00 2001 From: dong2ast <31067658+dong2ast@users.noreply.github.com> Date: Tue, 5 Dec 2023 13:55:22 +0900 Subject: [PATCH 1/2] [Refactor] social rename (#82) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 처음 소셜로그인 가입시 권한을 GUEST로 설정하고 이름 입력폼으로 리다이렉트 * feat: 이름 및 권한 변경 로직 구현 * add: 소셜로그인 리다이렉트 url 추가 --- src/main/java/com/uspray/uspray/Enums/Authority.java | 2 +- .../uspray/uspray/controller/MemberController.java | 10 ++++++++++ src/main/java/com/uspray/uspray/domain/Member.java | 7 +++++++ .../com/uspray/uspray/exception/SuccessStatus.java | 1 + .../client/oauth2/CustomOAuth2UserService.java | 5 +---- .../client/oauth2/OAuth2LoginSuccessHandler.java | 11 +++++++++++ .../java/com/uspray/uspray/service/MemberService.java | 9 +++++++++ 7 files changed, 40 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/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/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..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 @@ -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("/socialLoginNameInput"); // 프론트의 회원가입 추가 정보 입력 폼으로 리다이렉트 (추가 컨트롤러를 만들고 거기서 post 해야지 User로 바뀜) + return; + } + TokenDto tokenDto = tokenProvider.generateTokenDto(authentication); redisTemplate.opsForValue().set("RT:" + authentication.getName(), tokenDto.getRefreshToken(), 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 98e6ab22a7a52ac3dd74fd9af43d47ec15cd8758 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Tue, 5 Dec 2023 14:56:50 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=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=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=EC=9D=84=20GUEST=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uspray/uspray/external/client/oauth2/OAuthAttributes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/uspray/uspray/external/client/oauth2/OAuthAttributes.java b/src/main/java/com/uspray/uspray/external/client/oauth2/OAuthAttributes.java index 16632541..9e62a7fe 100644 --- a/src/main/java/com/uspray/uspray/external/client/oauth2/OAuthAttributes.java +++ b/src/main/java/com/uspray/uspray/external/client/oauth2/OAuthAttributes.java @@ -49,7 +49,7 @@ public Member toEntity(OAuth2UserInfo oAuth2UserInfo, String randomId) { .name("Uspray") .userId(randomId) .socialId(oAuth2UserInfo.getId()) - .authority(Authority.ROLE_USER) + .authority(Authority.ROLE_GUEST) .build(); }