Skip to content

Commit bb37cd6

Browse files
authored
refactor: 응답에서 refresh token은 제외하여 전달하도록 (#646)
* refactor: 응답에서 refresh token은 제외하여 전달하도록 * refactor: 미사용 응답 필드 제거 * refactor: 쿠키 설정용, HTTP 응답용 DTO 변경 * test: result 객체 추가에 따른 테스트 코드 수정
1 parent 4efa1bc commit bb37cd6

13 files changed

Lines changed: 88 additions & 62 deletions

File tree

src/main/java/com/example/solidconnection/auth/controller/AuthController.java

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
import com.example.solidconnection.auth.dto.EmailSignUpTokenResponse;
66
import com.example.solidconnection.auth.dto.ReissueResponse;
77
import com.example.solidconnection.auth.dto.SignInResponse;
8+
import com.example.solidconnection.auth.dto.SignInResult;
89
import com.example.solidconnection.auth.dto.SignUpRequest;
910
import com.example.solidconnection.auth.dto.oauth.OAuthCodeRequest;
1011
import com.example.solidconnection.auth.dto.oauth.OAuthResponse;
11-
import com.example.solidconnection.auth.dto.oauth.OAuthSignInResponse;
12+
import com.example.solidconnection.auth.dto.oauth.OAuthResult;
1213
import com.example.solidconnection.auth.service.AuthService;
1314
import com.example.solidconnection.auth.service.oauth.OAuthService;
1415
import com.example.solidconnection.auth.service.signin.EmailSignInService;
@@ -47,33 +48,29 @@ public ResponseEntity<OAuthResponse> processAppleOAuth(
4748
@Valid @RequestBody OAuthCodeRequest oAuthCodeRequest,
4849
HttpServletResponse httpServletResponse
4950
) {
50-
OAuthResponse oAuthResponse = oAuthService.processOAuth(AuthType.APPLE, oAuthCodeRequest);
51-
if (oAuthResponse instanceof OAuthSignInResponse signInResponse) {
52-
refreshTokenCookieManager.setCookie(httpServletResponse, signInResponse.refreshToken());
53-
}
54-
return ResponseEntity.ok(oAuthResponse);
51+
OAuthResult oAuthResult = oAuthService.processOAuth(AuthType.APPLE, oAuthCodeRequest);
52+
setRefreshTokenCookie(httpServletResponse, oAuthResult.refreshToken());
53+
return ResponseEntity.ok(oAuthResult.response());
5554
}
5655

5756
@PostMapping("/kakao")
5857
public ResponseEntity<OAuthResponse> processKakaoOAuth(
5958
@Valid @RequestBody OAuthCodeRequest oAuthCodeRequest,
6059
HttpServletResponse httpServletResponse
6160
) {
62-
OAuthResponse oAuthResponse = oAuthService.processOAuth(AuthType.KAKAO, oAuthCodeRequest);
63-
if (oAuthResponse instanceof OAuthSignInResponse signInResponse) {
64-
refreshTokenCookieManager.setCookie(httpServletResponse, signInResponse.refreshToken());
65-
}
66-
return ResponseEntity.ok(oAuthResponse);
61+
OAuthResult oAuthResult = oAuthService.processOAuth(AuthType.KAKAO, oAuthCodeRequest);
62+
setRefreshTokenCookie(httpServletResponse, oAuthResult.refreshToken());
63+
return ResponseEntity.ok(oAuthResult.response());
6764
}
6865

6966
@PostMapping("/email/sign-in")
7067
public ResponseEntity<SignInResponse> signInWithEmail(
7168
@Valid @RequestBody EmailSignInRequest signInRequest,
7269
HttpServletResponse httpServletResponse
7370
) {
74-
SignInResponse signInResponse = emailSignInService.signIn(signInRequest);
75-
refreshTokenCookieManager.setCookie(httpServletResponse, signInResponse.refreshToken());
76-
return ResponseEntity.ok(signInResponse);
71+
SignInResult signInResult = emailSignInService.signIn(signInRequest);
72+
refreshTokenCookieManager.setCookie(httpServletResponse, signInResult.refreshToken());
73+
return ResponseEntity.ok(SignInResponse.from(signInResult));
7774
}
7875

7976
/* 이메일 회원가입 시 signUpToken 을 발급받기 위한 api */
@@ -87,10 +84,12 @@ public ResponseEntity<EmailSignUpTokenResponse> signUpWithEmail(
8784

8885
@PostMapping("/sign-up")
8986
public ResponseEntity<SignInResponse> signUp(
90-
@Valid @RequestBody SignUpRequest signUpRequest
87+
@Valid @RequestBody SignUpRequest signUpRequest,
88+
HttpServletResponse httpServletResponse
9189
) {
92-
SignInResponse signInResponse = signUpService.signUp(signUpRequest);
93-
return ResponseEntity.ok(signInResponse);
90+
SignInResult signInResult = signUpService.signUp(signUpRequest);
91+
refreshTokenCookieManager.setCookie(httpServletResponse, signInResult.refreshToken());
92+
return ResponseEntity.ok(SignInResponse.from(signInResult));
9493
}
9594

9695
@PostMapping("/sign-out")
@@ -123,6 +122,12 @@ public ResponseEntity<ReissueResponse> reissueToken(HttpServletRequest request)
123122
return ResponseEntity.ok(reissueResponse);
124123
}
125124

125+
private void setRefreshTokenCookie(HttpServletResponse httpServletResponse, String refreshToken) {
126+
if (refreshToken != null) {
127+
refreshTokenCookieManager.setCookie(httpServletResponse, refreshToken);
128+
}
129+
}
130+
126131
private String getAccessToken(Authentication authentication) {
127132
if (authentication == null || !(authentication.getCredentials() instanceof String accessToken)) {
128133
throw new CustomException(ErrorCode.AUTHENTICATION_FAILED, "엑세스 토큰이 없습니다.");
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
package com.example.solidconnection.auth.dto;
22

3-
import com.example.solidconnection.auth.domain.AccessToken;
4-
import com.example.solidconnection.auth.domain.RefreshToken;
5-
63
public record SignInResponse(
7-
String accessToken,
8-
String refreshToken
4+
String accessToken
95
) {
106

11-
public static SignInResponse of(AccessToken accessToken, RefreshToken refreshToken) {
12-
return new SignInResponse(accessToken.token(), refreshToken.token());
7+
public static SignInResponse from(SignInResult signInResult) {
8+
return new SignInResponse(signInResult.accessToken());
139
}
1410
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.example.solidconnection.auth.dto;
2+
3+
import com.example.solidconnection.auth.domain.AccessToken;
4+
import com.example.solidconnection.auth.domain.RefreshToken;
5+
6+
public record SignInResult(
7+
String accessToken,
8+
String refreshToken
9+
) {
10+
11+
public static SignInResult of(AccessToken accessToken, RefreshToken refreshToken) {
12+
return new SignInResult(accessToken.token(), refreshToken.token());
13+
}
14+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.example.solidconnection.auth.dto.oauth;
2+
3+
public record OAuthResult(
4+
OAuthResponse response,
5+
String refreshToken
6+
) {
7+
8+
}
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.example.solidconnection.auth.dto.oauth;
22

3+
import com.example.solidconnection.auth.dto.SignInResult;
4+
35
public record OAuthSignInResponse(
4-
boolean isRegistered,
5-
String accessToken,
6-
String refreshToken) implements OAuthResponse {
6+
String accessToken) implements OAuthResponse {
77

8+
public static OAuthSignInResponse from(SignInResult signInResult) {
9+
return new OAuthSignInResponse(signInResult.accessToken());
10+
}
811
}

src/main/java/com/example/solidconnection/auth/dto/oauth/SignUpPrepareResponse.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package com.example.solidconnection.auth.dto.oauth;
22

33
public record SignUpPrepareResponse(
4-
boolean isRegistered,
54
String nickname,
65
String email,
76
String profileImageUrl,
87
String signUpToken) implements OAuthResponse {
98

109
public static SignUpPrepareResponse of(OAuthUserInfoDto oAuthUserInfoDto, String signUpToken) {
1110
return new SignUpPrepareResponse(
12-
false,
1311
oAuthUserInfoDto.getNickname(),
1412
oAuthUserInfoDto.getEmail(),
1513
oAuthUserInfoDto.getProfileImageUrl(),

src/main/java/com/example/solidconnection/auth/service/oauth/OAuthService.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.example.solidconnection.auth.service.oauth;
22

33
import com.example.solidconnection.auth.domain.SignUpToken;
4-
import com.example.solidconnection.auth.dto.SignInResponse;
4+
import com.example.solidconnection.auth.dto.SignInResult;
55
import com.example.solidconnection.auth.dto.oauth.OAuthCodeRequest;
6-
import com.example.solidconnection.auth.dto.oauth.OAuthResponse;
6+
import com.example.solidconnection.auth.dto.oauth.OAuthResult;
77
import com.example.solidconnection.auth.dto.oauth.OAuthSignInResponse;
88
import com.example.solidconnection.auth.dto.oauth.OAuthUserInfoDto;
99
import com.example.solidconnection.auth.dto.oauth.SignUpPrepareResponse;
@@ -32,26 +32,26 @@ public class OAuthService {
3232
private final OAuthClientMap oauthClientMap;
3333

3434
@Transactional
35-
public OAuthResponse processOAuth(AuthType authType, OAuthCodeRequest codeRequest) {
35+
public OAuthResult processOAuth(AuthType authType, OAuthCodeRequest codeRequest) {
3636
OAuthClient oauthClient = oauthClientMap.getOAuthClient(authType);
3737
OAuthUserInfoDto userInfo = oauthClient.getUserInfo(codeRequest.code());
3838
Optional<SiteUser> optionalSiteUser = siteUserRepository.findByEmailAndAuthType(userInfo.getEmail(), authType);
3939

4040
if (optionalSiteUser.isPresent()) {
4141
SiteUser siteUser = optionalSiteUser.get();
42-
return getSignInResponse(siteUser);
42+
return getSignInResult(siteUser);
4343
}
4444

45-
return getSignUpPrepareResponse(userInfo, authType);
45+
return getSignUpPrepareResult(userInfo, authType);
4646
}
4747

48-
private OAuthSignInResponse getSignInResponse(SiteUser siteUser) {
49-
SignInResponse signInResponse = signInService.signIn(siteUser);
50-
return new OAuthSignInResponse(true, signInResponse.accessToken(), signInResponse.refreshToken());
48+
private OAuthResult getSignInResult(SiteUser siteUser) {
49+
SignInResult signInResult = signInService.signIn(siteUser);
50+
return new OAuthResult(OAuthSignInResponse.from(signInResult), signInResult.refreshToken());
5151
}
5252

53-
private SignUpPrepareResponse getSignUpPrepareResponse(OAuthUserInfoDto userInfoDto, AuthType authType) {
53+
private OAuthResult getSignUpPrepareResult(OAuthUserInfoDto userInfoDto, AuthType authType) {
5454
SignUpToken signUpToken = signUpTokenProvider.generateAndSaveSignUpToken(userInfoDto.getEmail(), authType);
55-
return SignUpPrepareResponse.of(userInfoDto, signUpToken.token());
55+
return new OAuthResult(SignUpPrepareResponse.of(userInfoDto, signUpToken.token()), null);
5656
}
5757
}

src/main/java/com/example/solidconnection/auth/service/signin/EmailSignInService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import static com.example.solidconnection.common.exception.ErrorCode.SIGN_IN_FAILED;
44

55
import com.example.solidconnection.auth.dto.EmailSignInRequest;
6-
import com.example.solidconnection.auth.dto.SignInResponse;
6+
import com.example.solidconnection.auth.dto.SignInResult;
77
import com.example.solidconnection.common.exception.CustomException;
88
import com.example.solidconnection.siteuser.domain.AuthType;
99
import com.example.solidconnection.siteuser.domain.SiteUser;
@@ -22,7 +22,7 @@ public class EmailSignInService {
2222
private final PasswordEncoder passwordEncoder;
2323

2424
@Transactional(readOnly = true)
25-
public SignInResponse signIn(EmailSignInRequest signInRequest) {
25+
public SignInResult signIn(EmailSignInRequest signInRequest) {
2626
SiteUser siteUser = getEmailMatchingUserOrThrow(signInRequest.email());
2727
validatePassword(signInRequest.password(), siteUser.getPassword());
2828
return signInService.signIn(siteUser);

src/main/java/com/example/solidconnection/auth/service/signin/SignInService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.example.solidconnection.auth.domain.AccessToken;
44
import com.example.solidconnection.auth.domain.RefreshToken;
5-
import com.example.solidconnection.auth.dto.SignInResponse;
5+
import com.example.solidconnection.auth.dto.SignInResult;
66
import com.example.solidconnection.auth.service.AuthTokenProvider;
77
import com.example.solidconnection.siteuser.domain.SiteUser;
88
import lombok.RequiredArgsConstructor;
@@ -16,11 +16,11 @@ public class SignInService {
1616
private final AuthTokenProvider authTokenProvider;
1717

1818
@Transactional
19-
public SignInResponse signIn(SiteUser siteUser) {
19+
public SignInResult signIn(SiteUser siteUser) {
2020
resetQuitedAt(siteUser);
2121
AccessToken accessToken = authTokenProvider.generateAccessToken(siteUser);
2222
RefreshToken refreshToken = authTokenProvider.generateAndSaveRefreshToken(siteUser);
23-
return SignInResponse.of(accessToken, refreshToken);
23+
return SignInResult.of(accessToken, refreshToken);
2424
}
2525

2626
private void resetQuitedAt(SiteUser siteUser) {

src/main/java/com/example/solidconnection/auth/service/signup/SignUpService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import static com.example.solidconnection.common.exception.ErrorCode.SIGN_UP_TOKEN_INVALID;
55
import static com.example.solidconnection.common.exception.ErrorCode.USER_ALREADY_EXISTED;
66

7-
import com.example.solidconnection.auth.dto.SignInResponse;
7+
import com.example.solidconnection.auth.dto.SignInResult;
88
import com.example.solidconnection.auth.dto.SignUpRequest;
99
import com.example.solidconnection.auth.service.signin.SignInService;
1010
import com.example.solidconnection.common.exception.CustomException;
@@ -38,7 +38,7 @@ public class SignUpService {
3838
private final PasswordTemporaryStorage passwordTemporaryStorage;
3939

4040
@Transactional
41-
public SignInResponse signUp(SignUpRequest signUpRequest) {
41+
public SignInResult signUp(SignUpRequest signUpRequest) {
4242
// 검증
4343
signUpTokenProvider.validateSignUpToken(signUpRequest.signUpToken());
4444
String email = signUpTokenProvider.parseEmail(signUpRequest.signUpToken());
@@ -66,7 +66,7 @@ public SignInResponse signUp(SignUpRequest signUpRequest) {
6666
interestedCountryService.saveInterestedCountry(siteUser, signUpRequest.interestedCountries());
6767

6868
// 로그인
69-
SignInResponse response = signInService.signIn(siteUser);
69+
SignInResult response = signInService.signIn(siteUser);
7070

7171
// 회원가입을 위해 저장한 데이터(SignUpToken, 비밀번호) 삭제
7272
clearSignUpData(email, authType);

0 commit comments

Comments
 (0)