Skip to content

Commit 19baa9c

Browse files
authored
Merge pull request #314 from prgrms-web-devcourse-final-project/refactor#313
[refactor] 사용자 정보 조회 api 수정
2 parents f4e678d + 8994395 commit 19baa9c

File tree

5 files changed

+37
-14
lines changed

5 files changed

+37
-14
lines changed

src/main/java/com/back/domain/user/controller/UserAuthController.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,7 @@ public RsData<Void> logout(HttpServletRequest request, HttpServletResponse respo
5555

5656
@Operation(summary = "현재 로그인한 유저 정보 조회", description = "세션 유효성 검증 및 사용자 정보 반환")
5757
@ApiResponses(value = {
58-
@ApiResponse(responseCode = "200", description = "인증된 유저 정보 반환 성공"),
59-
@ApiResponse(responseCode = "401", description = "인증되지 않은 사용자"),
60-
@ApiResponse(responseCode = "500", description = "서버 내부 오류")
58+
@ApiResponse(responseCode = "200", description = "사용자 정보 조회"),
6159
})
6260
@GetMapping("/me")
6361
public RsData<UserMeResDto> getCurrentUser() {

src/main/java/com/back/domain/user/dto/RefreshTokenResDto.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,5 @@ public static class UserInfoDto {
1616
private final String nickname;
1717
private final Boolean isFirstLogin;
1818
private final Double abvDegree;
19-
2019
}
2120
}

src/main/java/com/back/domain/user/service/UserAuthService.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.Optional;
2323
import java.util.Set;
2424

25+
import static org.springframework.security.core.context.SecurityContextHolder.*;
26+
2527
@Slf4j
2628
@Service
2729
@RequiredArgsConstructor
@@ -199,14 +201,30 @@ public RefreshTokenResDto refreshTokens(HttpServletRequest request, HttpServletR
199201

200202
//토큰 끊기면서 OAuth 자동 로그아웃
201203
public void logout(HttpServletRequest request, HttpServletResponse response) {
204+
// 1. RefreshToken DB에서 삭제
202205
String refreshToken = jwtUtil.getRefreshTokenFromCookie(request);
203-
204206
if (refreshToken != null) {
205207
refreshTokenService.revokeToken(refreshToken);
206208
}
207209

210+
// 2. JWT 쿠키 삭제
208211
jwtUtil.removeAccessTokenCookie(response);
209212
jwtUtil.removeRefreshTokenCookie(response);
213+
214+
// 3. Spring Security 세션 무효화 (Redis 포함)
215+
try {
216+
if (request.getSession(false) != null) {
217+
request.getSession().invalidate();
218+
log.debug("세션 무효화");
219+
}
220+
} catch (IllegalStateException e) {
221+
log.debug("세션이 이미 무효화되어 있음");
222+
}
223+
224+
// 4. SecurityContext 클리어
225+
clearContext();
226+
227+
log.info("로그아웃 완료 - JWT, 세션, SecurityContext 모두 정리됨");
210228
}
211229

212230
@Transactional
@@ -216,21 +234,28 @@ public void setFirstLoginFalse(Long id) {
216234
}
217235

218236
// 현재 로그인한 사용자 정보 조회 (세션 검증용)
237+
// 변경: 항상 200 응답, 비로그인 시 user: null 반환
219238
public UserMeResDto getCurrentUser() {
220239
try {
221240
User actor = rq.getActor();
222241

242+
// 비로그인 상태: user null 반환
223243
if (actor == null) {
224-
log.debug("인증되지 않은 사용자");
225-
throw new ServiceException(401, "인증되지 않은 사용자");
244+
log.debug("인증되지 않은 사용자 - user: null 반환");
245+
return UserMeResDto.builder()
246+
.user(null)
247+
.build();
226248
}
227249

228250
Optional<User> userOpt = userRepository.findById(actor.getId());
229251
if (userOpt.isEmpty()) {
230252
log.warn("사용자 ID {}를 DB에서 찾을 수 없음 (토큰은 유효하나 사용자 삭제됨)", actor.getId());
231-
throw new ServiceException(401, "인증되지 않은 사용자");
253+
return UserMeResDto.builder()
254+
.user(null)
255+
.build();
232256
}
233257

258+
// 로그인 상태: user 정보 반환
234259
User user = userOpt.get();
235260
String provider = extractProvider(user.getOauthId());
236261

@@ -245,11 +270,12 @@ public UserMeResDto getCurrentUser() {
245270
.build())
246271
.build();
247272

248-
} catch (ServiceException e) {
249-
throw e;
250273
} catch (Exception e) {
251274
log.error("사용자 정보 조회 중 서버 오류 발생: {}", e.getMessage(), e);
252-
throw new ServiceException(500, "서버 내부 오류");
275+
// 예외 발생 시에도 user: null 반환
276+
return UserMeResDto.builder()
277+
.user(null)
278+
.build();
253279
}
254280
}
255281

src/main/java/com/back/global/security/SecurityConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
6969
.requestMatchers("/login/oauth2/**").permitAll()
7070
.requestMatchers("/swagger-ui/**", "/api-docs/**").permitAll()
7171
.requestMatchers("/user/auth/refresh").permitAll()
72+
.requestMatchers("/user/auth/me").permitAll()
7273
7374
// 권한 불필요 - 조회 API
7475
.requestMatchers(GET, "/cocktails/**").permitAll()

src/main/resources/application.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,10 @@ custom:
102102
jwt:
103103
secretKey: ${JWT_SECRET_KEY}
104104
accessToken:
105-
expirationSeconds: "#{60}" # 15분 곱하기
105+
expirationSeconds: "#{60*15}"
106106
refreshToken:
107107
expirationSeconds: "#{60*60*24*30}"
108-
idleTimeoutHours: "#{1}"
109-
# "#{60*6*4}"
108+
idleTimeoutHours: "#{60*6*4}"
110109

111110

112111
management:

0 commit comments

Comments
 (0)