Skip to content

Commit 6f4c556

Browse files
authored
fix(be) : Token 문제 해결 (#146)
* refreshtoken 발급 로직 수정 * logout 로직 수정
1 parent 252a2eb commit 6f4c556

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

src/main/kotlin/com/back/koreaTravelGuide/common/security/JwtAuthenticationFilter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class JwtAuthenticationFilter(
2020
) {
2121
val token = resolveToken(request)
2222

23-
val isBlacklisted = if (token != null) redisTemplate.opsForValue().get(token) != null else false
23+
val isBlacklisted = if (token != null) redisTemplate.opsForValue().get("blacklist:$token") != null else false
2424

2525
if (token != null && !isBlacklisted && jwtTokenProvider.validateToken(token)) {
2626
val authentication = jwtTokenProvider.getAuthentication(token)

src/main/kotlin/com/back/koreaTravelGuide/domain/auth/controller/AuthController.kt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import com.back.koreaTravelGuide.common.ApiResponse
44
import com.back.koreaTravelGuide.common.security.getUserId
55
import com.back.koreaTravelGuide.domain.auth.dto.request.UserRoleUpdateRequest
66
import com.back.koreaTravelGuide.domain.auth.dto.response.AccessTokenResponse
7-
import com.back.koreaTravelGuide.domain.auth.dto.response.LoginResponse
87
import com.back.koreaTravelGuide.domain.auth.service.AuthService
98
import io.swagger.v3.oas.annotations.Operation
9+
import jakarta.servlet.http.Cookie
1010
import jakarta.servlet.http.HttpServletRequest
1111
import jakarta.servlet.http.HttpServletResponse
1212
import org.springframework.beans.factory.annotation.Value
@@ -48,10 +48,21 @@ class AuthController(
4848
fun updateUserRole(
4949
authentication: Authentication,
5050
@RequestBody request: UserRoleUpdateRequest,
51-
): ResponseEntity<ApiResponse<LoginResponse>> {
51+
response: HttpServletResponse,
52+
): ResponseEntity<ApiResponse<AccessTokenResponse>> {
5253
val userId = authentication.getUserId()
53-
val loginResponse = authService.updateRoleAndLogin(userId, request.role)
54-
return ResponseEntity.ok(ApiResponse("역할이 선택되었으며 로그인에 성공했습니다.", loginResponse))
54+
val (accessToken, refreshToken) = authService.updateRoleAndLogin(userId, request.role)
55+
56+
val cookie =
57+
Cookie("refreshToken", refreshToken).apply {
58+
isHttpOnly = true
59+
secure = true
60+
path = "/"
61+
maxAge = (refreshTokenExpirationDays * 24 * 60 * 60).toInt()
62+
}
63+
response.addCookie(cookie)
64+
65+
return ResponseEntity.ok(ApiResponse("역할이 선택되었으며 로그인에 성공했습니다.", AccessTokenResponse(accessToken = accessToken)))
5566
}
5667

5768
@Operation(summary = "로그아웃")

src/main/kotlin/com/back/koreaTravelGuide/domain/auth/service/AuthService.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.back.koreaTravelGuide.domain.auth.service
22

33
import com.back.koreaTravelGuide.common.security.JwtTokenProvider
4-
import com.back.koreaTravelGuide.domain.auth.dto.response.LoginResponse
54
import com.back.koreaTravelGuide.domain.user.enums.UserRole
65
import com.back.koreaTravelGuide.domain.user.repository.UserRepository
76
import org.springframework.beans.factory.annotation.Value
@@ -22,7 +21,7 @@ class AuthService(
2221
fun updateRoleAndLogin(
2322
userId: Long,
2423
role: UserRole,
25-
): LoginResponse {
24+
): Pair<String, String> {
2625
if (role != UserRole.USER && role != UserRole.GUIDE) {
2726
throw IllegalArgumentException("선택할 수 없는 역할입니다.")
2827
}
@@ -39,15 +38,19 @@ class AuthService(
3938
userRepository.save(user)
4039

4140
val accessToken = jwtTokenProvider.createAccessToken(user.id!!, user.role)
41+
val refreshToken = jwtTokenProvider.createRefreshToken(user.id!!)
4242

43-
return LoginResponse(accessToken = accessToken)
43+
val redisKey = "refreshToken:${user.id}"
44+
redisTemplate.opsForValue().set(redisKey, refreshToken, refreshTokenExpirationDays, TimeUnit.DAYS)
45+
46+
return Pair(accessToken, refreshToken)
4447
}
4548

4649
fun logout(accessToken: String) {
4750
val remainingTime = jwtTokenProvider.getRemainingTime(accessToken)
4851

4952
if (remainingTime > 0) {
50-
redisTemplate.opsForValue().set(accessToken, "logout", remainingTime, TimeUnit.MILLISECONDS)
53+
redisTemplate.opsForValue().set("blacklist:$accessToken", "logout", remainingTime, TimeUnit.MILLISECONDS)
5154
}
5255
}
5356

0 commit comments

Comments
 (0)