Skip to content

Commit f71f41b

Browse files
authored
Merge pull request #40 from prgrms-web-devcourse-final-project/feat#35
[feat] OAuth 리프레시 토큰 연동
2 parents 4b83264 + 86f6322 commit f71f41b

File tree

6 files changed

+27
-33
lines changed

6 files changed

+27
-33
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ public String generateUniqueNickname(String baseNickname) {
8787

8888
// 리프레시 토큰 관련
8989

90-
public void issueTokens(HttpServletResponse response, Long userId, String email) {
91-
String accessToken = jwtUtil.generateAccessToken(userId, email);
90+
public void issueTokens(HttpServletResponse response, Long userId, String email, String nickname) {
91+
String accessToken = jwtUtil.generateAccessToken(userId, email, nickname);
9292
String refreshToken = refreshTokenService.generateRefreshToken(userId, email);
9393

9494
jwtUtil.addAccessTokenToCookie(response, accessToken);
@@ -112,8 +112,15 @@ public boolean refreshTokens(HttpServletRequest request, HttpServletResponse res
112112
Long userId = refreshTokenEntity.getUserId();
113113
String email = refreshTokenEntity.getEmail();
114114

115+
// DB에서 현재 nickname 조회
116+
Optional<User> user = userRepository.findById(userId);
117+
if (user.isEmpty()) {
118+
return false;
119+
}
120+
String nickname = user.get().getNickname();
121+
115122
String newRefreshToken = refreshTokenService.rotateToken(oldRefreshToken);
116-
String newAccessToken = jwtUtil.generateAccessToken(userId, email);
123+
String newAccessToken = jwtUtil.generateAccessToken(userId, email, nickname);
117124

118125
jwtUtil.addAccessTokenToCookie(response, newAccessToken);
119126
jwtUtil.addRefreshTokenToCookie(response, newRefreshToken);

src/main/java/com/back/global/jwt/JwtUtil.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ public JwtUtil(@Value("${custom.jwt.secretKey}") String secretKey,
2828
this.accessTokenExpiration = accessTokenExpiration * 1000;
2929
}
3030

31-
public String generateAccessToken(Long userId, String email) {
31+
public String generateAccessToken(Long userId, String email, String nickname) {
3232
Date now = new Date();
3333
Date expiration = new Date(now.getTime() + accessTokenExpiration);
3434

3535
return Jwts.builder()
3636
.subject(String.valueOf(userId))
3737
.claim("email", email)
38+
.claim("nickname", nickname)
3839
.issuedAt(now)
3940
.expiration(expiration)
4041
.signWith(secretKey)
@@ -50,17 +51,6 @@ public void addAccessTokenToCookie(HttpServletResponse response, String accessTo
5051
response.addCookie(cookie);
5152
}
5253

53-
public String getAccessTokenFromCookie(HttpServletRequest request) {
54-
Cookie[] cookies = request.getCookies();
55-
if (cookies != null) {
56-
for (Cookie cookie : cookies) {
57-
if (ACCESS_TOKEN_COOKIE_NAME.equals(cookie.getName())) {
58-
return cookie.getValue();
59-
}
60-
}
61-
}
62-
return null;
63-
}
6454

6555
public void removeAccessTokenCookie(HttpServletResponse response) {
6656
Cookie cookie = new Cookie(ACCESS_TOKEN_COOKIE_NAME, null);

src/main/java/com/back/global/rq/Rq.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public User getActor() {
4848
return User.builder()
4949
.id(securityUser.getId())
5050
.email(securityUser.getEmail())
51-
.nickname(securityUser.getName())
51+
.nickname(securityUser.getNickname())
5252
.role(role)
5353
.build();
5454
})

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private void work(HttpServletRequest request, HttpServletResponse response, Filt
116116

117117
// accessToken이 만료됐으면 새로 발급
118118
if (isAccessTokenExists && !isAccessTokenValid) {
119-
String newAccessToken = jwtUtil.generateAccessToken(user.getId(), user.getEmail());
119+
String newAccessToken = jwtUtil.generateAccessToken(user.getId(), user.getEmail(), user.getNickname());
120120
rq.setCrossDomainCookie("accessToken", newAccessToken, accessTokenExpiration);
121121
}
122122

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

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.back.global.security;
22

3-
import com.back.domain.user.service.UserService;
4-
import com.back.global.jwt.JwtUtil;
5-
import com.back.global.rq.Rq;
3+
import com.back.domain.user.service.UserAuthService;
64
import jakarta.servlet.ServletException;
75
import jakarta.servlet.http.HttpServletRequest;
86
import jakarta.servlet.http.HttpServletResponse;
@@ -13,14 +11,12 @@
1311
import org.springframework.stereotype.Component;
1412

1513
import java.io.IOException;
16-
import java.util.concurrent.TimeUnit;
1714

1815
@Component
1916
@RequiredArgsConstructor
2017
public class CustomOAuth2LoginSuccessHandler implements AuthenticationSuccessHandler {
21-
private final Rq rq;
22-
private final JwtUtil jwtUtil;
23-
private final UserService userService;
18+
19+
private final UserAuthService userAuthService;
2420

2521
@Value("${FRONTEND_URL}")
2622
private String frontendUrl;
@@ -29,11 +25,8 @@ public class CustomOAuth2LoginSuccessHandler implements AuthenticationSuccessHan
2925
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
3026
SecurityUser securityUser = (SecurityUser) authentication.getPrincipal();
3127

32-
// Access Token 생성
33-
String accessToken = jwtUtil.generateAccessToken(securityUser.getId(), securityUser.getEmail());
34-
35-
// 쿠키에 토큰 저장
36-
rq.setCrossDomainCookie("accessToken", accessToken, (int) TimeUnit.MINUTES.toSeconds(20));
28+
// Access Token과 Refresh Token 발급
29+
userAuthService.issueTokens(response, securityUser.getId(), securityUser.getEmail(), securityUser.getNickname());
3730

3831
// 프론트엔드로 리다이렉트
3932
String redirectUrl = frontendUrl + "/oauth/success";

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class SecurityUser extends User implements OAuth2User {
1313
private Long id;
1414

1515
@Getter
16-
private String name;
16+
private String nickname;
1717

1818
@Getter
1919
private String email;
@@ -24,13 +24,13 @@ public class SecurityUser extends User implements OAuth2User {
2424
public SecurityUser(
2525
long id,
2626
String email,
27-
String name,
27+
String nickname,
2828
Collection<? extends GrantedAuthority> authorities,
2929
Map<String, Object> attributes
3030
) {
3131
super(email, "", authorities); // OAuth2에서는 빈 패스워드
3232
this.id = id;
33-
this.name = name;
33+
this.nickname = nickname;
3434
this.email = email;
3535
this.attributes = attributes;
3636
}
@@ -42,6 +42,10 @@ public Map<String, Object> getAttributes() {
4242

4343
@Override
4444
public String getName() {
45-
return name; // OAuth2User 인터페이스용
45+
return nickname; // OAuth2User 인터페이스용 - nickname 반환
46+
}
47+
48+
public String getNickname() {
49+
return getName();
4650
}
4751
}

0 commit comments

Comments
 (0)