Skip to content

Commit f0972bd

Browse files
committed
refactor : 로그인 정보 조회 api 추가
1 parent cc95cae commit f0972bd

File tree

4 files changed

+91
-5
lines changed

4 files changed

+91
-5
lines changed

cookies.txt

Lines changed: 0 additions & 5 deletions
This file was deleted.

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.back.domain.user.controller;
22

33
import com.back.domain.user.dto.RefreshTokenResDto;
4+
import com.back.domain.user.dto.UserMeResDto;
45
import com.back.domain.user.service.UserAuthService;
56
import com.back.global.rsData.RsData;
67
import io.swagger.v3.oas.annotations.Operation;
@@ -11,6 +12,7 @@
1112
import jakarta.servlet.http.HttpServletResponse;
1213
import lombok.RequiredArgsConstructor;
1314
import lombok.extern.slf4j.Slf4j;
15+
import org.springframework.web.bind.annotation.GetMapping;
1416
import org.springframework.web.bind.annotation.PostMapping;
1517
import org.springframework.web.bind.annotation.RequestMapping;
1618
import org.springframework.web.bind.annotation.RestController;
@@ -50,4 +52,16 @@ public RsData<Void> logout(HttpServletRequest request, HttpServletResponse respo
5052
userAuthService.logout(request, response);
5153
return RsData.of(200, "로그아웃되었습니다.");
5254
}
55+
56+
@Operation(summary = "현재 로그인한 유저 정보 조회", description = "세션 유효성 검증 및 사용자 정보 반환")
57+
@ApiResponses(value = {
58+
@ApiResponse(responseCode = "200", description = "인증된 유저 정보 반환 성공"),
59+
@ApiResponse(responseCode = "401", description = "인증되지 않은 사용자"),
60+
@ApiResponse(responseCode = "500", description = "서버 내부 오류")
61+
})
62+
@GetMapping("/me")
63+
public RsData<UserMeResDto> getCurrentUser() {
64+
UserMeResDto userInfo = userAuthService.getCurrentUser();
65+
return RsData.of(200, "인증된 유저 정보 반환 성공", userInfo);
66+
}
5367
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.back.domain.user.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@Builder
9+
public class UserMeResDto {
10+
@JsonProperty("user")
11+
private final UserInfo user;
12+
13+
@Getter
14+
@Builder
15+
public static class UserInfo {
16+
private final String id;
17+
private final String email;
18+
private final String nickname;
19+
20+
@JsonProperty("is_first_login")
21+
private final Boolean isFirstLogin;
22+
23+
@JsonProperty("abv_degree")
24+
private final Double abvDegree;
25+
26+
private final String provider;
27+
}
28+
}

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.back.domain.user.service;
22

33
import com.back.domain.user.dto.RefreshTokenResDto;
4+
import com.back.domain.user.dto.UserMeResDto;
45
import com.back.domain.user.entity.User;
56
import com.back.domain.user.repository.UserRepository;
67
import com.back.global.exception.ServiceException;
78
import com.back.global.jwt.JwtUtil;
89
import com.back.global.jwt.refreshToken.entity.RefreshToken;
910
import com.back.global.jwt.refreshToken.repository.RefreshTokenRepository;
1011
import com.back.global.jwt.refreshToken.service.RefreshTokenService;
12+
import com.back.global.rq.Rq;
1113
import com.back.global.rsData.RsData;
1214
import jakarta.servlet.http.HttpServletRequest;
1315
import jakarta.servlet.http.HttpServletResponse;
@@ -76,6 +78,7 @@ public class UserAuthService {
7678
private final UserRepository userRepository;
7779
private final RefreshTokenService refreshTokenService;
7880
private final RefreshTokenRepository refreshTokenRepository;
81+
private final Rq rq;
7982

8083
//OAuth 관련
8184

@@ -211,4 +214,50 @@ public void setFirstLoginFalse(Long id) {
211214
Optional<User> userOpt = userRepository.findById(id);
212215
userOpt.ifPresent(user -> user.setFirstLogin(false));
213216
}
217+
218+
// 현재 로그인한 사용자 정보 조회 (세션 검증용)
219+
public UserMeResDto getCurrentUser() {
220+
try {
221+
User actor = rq.getActor();
222+
223+
if (actor == null) {
224+
log.debug("인증되지 않은 사용자");
225+
throw new ServiceException(401, "인증되지 않은 사용자");
226+
}
227+
228+
Optional<User> userOpt = userRepository.findById(actor.getId());
229+
if (userOpt.isEmpty()) {
230+
log.warn("사용자 ID {}를 DB에서 찾을 수 없음 (토큰은 유효하나 사용자 삭제됨)", actor.getId());
231+
throw new ServiceException(401, "인증되지 않은 사용자");
232+
}
233+
234+
User user = userOpt.get();
235+
String provider = extractProvider(user.getOauthId());
236+
237+
return UserMeResDto.builder()
238+
.user(UserMeResDto.UserInfo.builder()
239+
.id(user.getId().toString())
240+
.email(user.getEmail())
241+
.nickname(user.getNickname())
242+
.isFirstLogin(user.isFirstLogin())
243+
.abvDegree(user.getAbvDegree())
244+
.provider(provider)
245+
.build())
246+
.build();
247+
248+
} catch (ServiceException e) {
249+
throw e;
250+
} catch (Exception e) {
251+
log.error("사용자 정보 조회 중 서버 오류 발생: {}", e.getMessage(), e);
252+
throw new ServiceException(500, "서버 내부 오류");
253+
}
254+
}
255+
256+
private String extractProvider(String oauthId) {
257+
if (oauthId == null || oauthId.isBlank()) {
258+
return "unknown";
259+
}
260+
String[] parts = oauthId.split("_", 2);
261+
return parts.length > 0 ? parts[0] : "unknown";
262+
}
214263
}

0 commit comments

Comments
 (0)