diff --git a/findMuse-API/src/main/java/com/whh/findmuseapi/common/config/SecurityConfig.java b/findMuse-API/src/main/java/com/whh/findmuseapi/common/config/SecurityConfig.java index 7dbdcbd7..5ced1811 100644 --- a/findMuse-API/src/main/java/com/whh/findmuseapi/common/config/SecurityConfig.java +++ b/findMuse-API/src/main/java/com/whh/findmuseapi/common/config/SecurityConfig.java @@ -74,6 +74,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // 로그인 요청은 Fillter 검사에서 제외됨 .requestMatchers( "/auth/apple/token", + "/jwt/refresh", "/auth/apple/test", "/swagger-ui/**", "/v3/api-docs/**", diff --git a/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/controller/JwtController.java b/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/controller/JwtController.java index 8cc1a8a0..f53b0896 100644 --- a/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/controller/JwtController.java +++ b/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/controller/JwtController.java @@ -2,11 +2,10 @@ import com.whh.findmuseapi.common.constant.ResponseCode; import com.whh.findmuseapi.common.util.ApiResponse; -import com.whh.findmuseapi.jwt.dto.RefreshTokenResponse; +import com.whh.findmuseapi.jwt.dto.RefreshTokenDto; import com.whh.findmuseapi.jwt.service.JwtService; -import com.whh.findmuseapi.user.entity.User; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.RequiredArgsConstructor; -import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -19,9 +18,8 @@ public class JwtController { private final JwtService jwtService; @PatchMapping("/refresh") - public ApiResponse reIssueRefreshToken(@AuthenticationPrincipal User user) { - String refreshToken = jwtService.reIssueRefreshToken(user); - return ApiResponse.createSuccess(ResponseCode.RESOURCE_CREATED, new RefreshTokenResponse(refreshToken)); + public ApiResponse reIssueRefreshToken(@RequestBody RefreshTokenDto refreshTokenDto) { + return ApiResponse.createSuccess(ResponseCode.RESOURCE_CREATED, jwtService.reIssueRefreshToken(refreshTokenDto)); } } diff --git a/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/dto/RefreshTokenDto.java b/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/dto/RefreshTokenDto.java new file mode 100644 index 00000000..c7890cb8 --- /dev/null +++ b/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/dto/RefreshTokenDto.java @@ -0,0 +1,9 @@ +package com.whh.findmuseapi.jwt.dto; + + +import lombok.Builder; + +@Builder +public record RefreshTokenDto( + String refreshToken +) {} diff --git a/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/dto/RefreshTokenResponse.java b/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/dto/RefreshTokenResponse.java deleted file mode 100644 index 83a9e82e..00000000 --- a/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/dto/RefreshTokenResponse.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.whh.findmuseapi.jwt.dto; - -import lombok.AllArgsConstructor; - -@AllArgsConstructor -public class RefreshTokenResponse { - String refreshToken; -} diff --git a/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/service/JwtService.java b/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/service/JwtService.java index d0d17b7a..35b8ccfc 100644 --- a/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/service/JwtService.java +++ b/findMuse-API/src/main/java/com/whh/findmuseapi/jwt/service/JwtService.java @@ -7,6 +7,7 @@ import com.whh.findmuseapi.common.constant.ResponseCode; import com.whh.findmuseapi.common.exception.CBadRequestException; import com.whh.findmuseapi.common.exception.CUnAuthorizationException; +import com.whh.findmuseapi.jwt.dto.RefreshTokenDto; import com.whh.findmuseapi.jwt.property.JwtProperties; import com.whh.findmuseapi.user.entity.User; import com.whh.findmuseapi.user.repository.UserRepository; @@ -21,6 +22,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Slf4j @Getter @@ -175,10 +177,22 @@ public void reIssueAccessToken(HttpServletResponse response, String refreshToken * @param user * @return reIssuedRefreshToken */ + @Transactional public String reIssueRefreshToken(User user) { String reIssuedRefreshToken = createRefreshToken(); user.updateRefreshToken(reIssuedRefreshToken); userRepository.saveAndFlush(user); return reIssuedRefreshToken; } + + @Transactional + public RefreshTokenDto reIssueRefreshToken(RefreshTokenDto refreshTokenDto) { + User user = userRepository.findByRefreshToken(refreshTokenDto.refreshToken()) + .orElseThrow(() -> new CBadRequestException("유저를 찾을 수 없습니다.")); + + String refreshToken = reIssueRefreshToken(user); + return RefreshTokenDto.builder() + .refreshToken(refreshToken) + .build(); + } } diff --git a/findMuse-API/src/main/java/com/whh/findmuseapi/user/entity/User.java b/findMuse-API/src/main/java/com/whh/findmuseapi/user/entity/User.java index e4c1e902..5a134146 100644 --- a/findMuse-API/src/main/java/com/whh/findmuseapi/user/entity/User.java +++ b/findMuse-API/src/main/java/com/whh/findmuseapi/user/entity/User.java @@ -126,6 +126,10 @@ public void updateRefreshToken(String updatedRefreshToken) { public void updateNickname(String nickname) { this.nickname = nickname; } + + public void updateIsOnboardingFinished() { + this.isOnboardingFinished = true; + } public void updateLocation(String location) { this.location = location; diff --git a/findMuse-API/src/main/java/com/whh/findmuseapi/user/service/UserService.java b/findMuse-API/src/main/java/com/whh/findmuseapi/user/service/UserService.java index 1b32b10b..5e895a04 100644 --- a/findMuse-API/src/main/java/com/whh/findmuseapi/user/service/UserService.java +++ b/findMuse-API/src/main/java/com/whh/findmuseapi/user/service/UserService.java @@ -39,6 +39,7 @@ public void registerProfileNickname(User user, UserProfile.NicknameRequest nickn if (userRepository.existsByNickname(nicknameRequest.nickname())) throw new CBadRequestException("존재하는 닉네임입니다."); user.updateNickname(nicknameRequest.nickname()); + user.updateIsOnboardingFinished(); user.authorizeUser(); }