Skip to content

Commit c6dff9a

Browse files
committed
Refactor: 회원 탈퇴시 쿠키 삭제 되도록 수정
1 parent a1167f2 commit c6dff9a

File tree

4 files changed

+40
-8
lines changed

4 files changed

+40
-8
lines changed

src/main/java/com/likelion/ai_teacher_a/domain/user/controller/UserController.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package com.likelion.ai_teacher_a.domain.user.controller;
22

33
import org.springframework.http.ResponseEntity;
4+
import org.springframework.web.bind.annotation.CookieValue;
45
import org.springframework.web.bind.annotation.DeleteMapping;
56
import org.springframework.web.bind.annotation.PostMapping;
67
import org.springframework.web.bind.annotation.RequestMapping;
78
import org.springframework.web.bind.annotation.RestController;
89

910
import com.likelion.ai_teacher_a.domain.user.service.UserService;
1011
import com.likelion.ai_teacher_a.global.auth.resolver.annotation.LoginUserId;
12+
import com.likelion.ai_teacher_a.global.auth.util.dto.CookieResponse;
1113

1214
import io.swagger.v3.oas.annotations.Operation;
1315
import io.swagger.v3.oas.annotations.tags.Tag;
16+
import jakarta.servlet.http.HttpServletResponse;
1417
import lombok.RequiredArgsConstructor;
1518

1619
@Tag(name = "User Controller", description = "사용자 관련 API")
@@ -23,15 +26,18 @@ public class UserController {
2326

2427
@Operation(summary = "회원 탈퇴")
2528
@DeleteMapping
26-
public ResponseEntity<Void> deleteCurrentUser(@LoginUserId Long loginId) {
29+
public ResponseEntity<Void> deleteCurrentUser(@LoginUserId Long loginId,
30+
@CookieValue("refresh_token") String refreshToken) {
2731

28-
userService.deleteUserById(loginId);
32+
userService.deleteUserById(loginId, refreshToken);
2933
return ResponseEntity.noContent().build();
3034
}
3135

3236
@PostMapping("/logout")
33-
public ResponseEntity<?> logout(@LoginUserId Long userId) {
34-
userService.deleteRefreshToken(userId);
37+
public ResponseEntity<?> logout(@LoginUserId Long userId, @CookieValue("refresh_token") String refreshToken,
38+
HttpServletResponse resp) {
39+
CookieResponse result = userService.deleteRefreshToken(userId, refreshToken);
40+
resp.addCookie(result.cookie());
3541
return ResponseEntity.ok().build();
3642
}
3743

src/main/java/com/likelion/ai_teacher_a/domain/user/service/UserService.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
import com.likelion.ai_teacher_a.domain.user.entity.User;
88
import com.likelion.ai_teacher_a.domain.user.repository.UserRepository;
99
import com.likelion.ai_teacher_a.domain.userJr.repository.UserJrRepository;
10+
import com.likelion.ai_teacher_a.global.auth.util.CookieUtils;
1011
import com.likelion.ai_teacher_a.global.auth.util.JwtUtil;
12+
import com.likelion.ai_teacher_a.global.auth.util.dto.CookieResponse;
1113
import com.likelion.ai_teacher_a.global.exception.CustomException;
1214
import com.likelion.ai_teacher_a.global.exception.ErrorCode;
1315

16+
import jakarta.servlet.http.Cookie;
1417
import jakarta.transaction.Transactional;
1518
import lombok.Getter;
1619
import lombok.RequiredArgsConstructor;
@@ -29,19 +32,21 @@ public class UserService {
2932
private final JwtUtil jwtUtil;
3033

3134
@Transactional
32-
public void deleteUserById(Long id) {
35+
public void deleteUserById(Long id, String refreshToken) {
3336
User user = userRepository.findById(id)
3437
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));
3538

36-
userRepository.deleteById(user.getId());
39+
userRepository.deleteById(id);
40+
deleteRefreshToken(id, refreshToken);
3741
}
3842

3943
@Transactional
40-
public void deleteRefreshToken(Long userId) {
44+
public CookieResponse deleteRefreshToken(Long userId, String refreshToken) {
4145
User user = userRepository.findById(userId)
4246
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));
4347
user.setRefreshToken(null);
44-
48+
Cookie cookie = CookieUtils.deleteRefeshTokenCookie(refreshToken);
49+
return CookieResponse.builder().cookie(cookie).build();
4550
}
4651
}
4752

src/main/java/com/likelion/ai_teacher_a/global/auth/util/CookieUtils.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,15 @@ public static Cookie createRefeshTokenCookie(String newRefreshToken) {
6767
refreshTokenCookie.setMaxAge(60 * 60 * 24 * 7);
6868
return refreshTokenCookie;
6969
}
70+
71+
public static Cookie deleteRefeshTokenCookie(String refreshToken) {
72+
Cookie refreshTokenCookie = new Cookie("refresh_token", refreshToken);
73+
refreshTokenCookie.setHttpOnly(true);
74+
refreshTokenCookie.setSecure(true);
75+
refreshTokenCookie.setPath("/");
76+
refreshTokenCookie.setDomain("ai-teacher-back-latest.onrender.com");
77+
refreshTokenCookie.setAttribute("SameSite", "None");
78+
refreshTokenCookie.setMaxAge(0);
79+
return refreshTokenCookie;
80+
}
7081
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.likelion.ai_teacher_a.global.auth.util.dto;
2+
3+
import jakarta.servlet.http.Cookie;
4+
import lombok.Builder;
5+
6+
@Builder
7+
public record CookieResponse(
8+
Cookie cookie
9+
) {
10+
}

0 commit comments

Comments
 (0)