Skip to content

Commit a9df020

Browse files
authored
Merge pull request #27 from AI-Tutor-2024/develop
[DEPLOY]
2 parents c51dff6 + 4d1a40d commit a9df020

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

src/main/java/com/example/ai_tutor/domain/auth/application/AuthService.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.example.ai_tutor.global.payload.ApiResponse;
1414
import com.example.ai_tutor.global.payload.Message;
1515
import lombok.RequiredArgsConstructor;
16+
import lombok.extern.slf4j.Slf4j;
1617
import org.springframework.http.ResponseEntity;
1718
import org.springframework.security.authentication.AuthenticationManager;
1819
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -29,6 +30,7 @@
2930
@RequiredArgsConstructor
3031
@Service
3132
@Transactional(readOnly = true)
33+
@Slf4j
3234
public class AuthService {
3335

3436
private final CustomTokenProviderService customTokenProviderService;
@@ -43,22 +45,28 @@ public class AuthService {
4345
@Transactional
4446
public ResponseEntity<?> refresh(RefreshTokenReq tokenRefreshRequest){
4547
//1차 검증
46-
boolean checkValid = valid(tokenRefreshRequest.getRefreshToken());
48+
String refreshToken = tokenRefreshRequest.getRefreshToken().replace("Bearer ", "").trim();
49+
log.info("refreshToken : {}", refreshToken);
50+
51+
boolean checkValid = valid(refreshToken);
4752
DefaultAssert.isAuthentication(checkValid);
53+
log.info("refresh token 검증 성공");
4854

49-
Token token = tokenRepository.findByRefreshToken(tokenRefreshRequest.getRefreshToken())
55+
Token token = tokenRepository.findByRefreshToken(refreshToken)
5056
.orElseThrow(InvalidTokenException::new);
51-
Authentication authentication = customTokenProviderService.getAuthenticationByEmail(token.getUserEmail());
5257

53-
//refresh token 정보 값을 업데이트 한다.
58+
Authentication authentication = customTokenProviderService.getAuthenticationByToken(refreshToken);
59+
5460
//시간 유효성 확인
5561
TokenMapping tokenMapping;
5662

5763
Long expirationTime = customTokenProviderService.getExpiration(tokenRefreshRequest.getRefreshToken());
5864
if(expirationTime > 0){
5965
tokenMapping = customTokenProviderService.refreshToken(authentication, token.getRefreshToken());
66+
log.info("refresh token 갱신 성공");
6067
}else{
6168
tokenMapping = customTokenProviderService.createToken(authentication);
69+
log.info("refresh token 갱신 실패");
6270
}
6371

6472
Token updateToken = token.updateRefreshToken(tokenMapping.getRefreshToken());
@@ -102,7 +110,7 @@ private boolean valid(String refreshToken){
102110
DefaultAssert.isTrue(token.isPresent(), "탈퇴 처리된 회원입니다.");
103111

104112
//3. email 값을 통해 인증값을 불러온다
105-
Authentication authentication = customTokenProviderService.getAuthenticationByEmail(token.get().getUserEmail());
113+
Authentication authentication = customTokenProviderService.getAuthenticationByToken(refreshToken);
106114
DefaultAssert.isTrue(token.get().getUserEmail().equals(authentication.getName()), "사용자 인증에 실패하였습니다.");
107115

108116
return true;
@@ -114,6 +122,8 @@ public ResponseEntity<?> signIn(SignInReq signInReq, @RequestHeader("Authorizati
114122
// 1. 토큰 파싱
115123
String googleAccessToken = authorizationHeader.replace("Bearer ", "").trim();
116124

125+
log.info("signInReq : {}", signInReq);
126+
117127
UserInfo userInfo = idTokenVerifier.verifyIdToken(googleAccessToken, signInReq.getEmail());
118128

119129
// 2. ID 토큰 검증 및 사용자 정보 추출

src/main/java/com/example/ai_tutor/domain/auth/application/CustomTokenProviderService.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public TokenMapping createToken(Authentication authentication) {
4646
.compact();
4747

4848
String refreshToken = Jwts.builder()
49+
.setSubject(userPrincipal.getEmail())
50+
.setIssuedAt(new Date())
4951
.setExpiration(refreshTokenExpiresIn)
5052
.signWith(key, SignatureAlgorithm.HS512)
5153
.compact();
@@ -102,6 +104,11 @@ public UsernamePasswordAuthenticationToken getAuthenticationById(String token){
102104

103105
public String getEmailFromToken(String token) {
104106
log.debug("Extracting email from token: {}", token); // 추가된 로깅
107+
108+
if (token.startsWith("Bearer ")) {
109+
token = token.substring(7);
110+
}
111+
105112
Claims claims = Jwts.parserBuilder()
106113
.setSigningKey(oAuth2Config.getAuth().getTokenSecret())
107114
.build()
@@ -113,8 +120,8 @@ public String getEmailFromToken(String token) {
113120
return email;
114121
}
115122

116-
public UsernamePasswordAuthenticationToken getAuthenticationByEmail(String token) {
117-
String email = getEmailFromToken(token);
123+
public UsernamePasswordAuthenticationToken getAuthenticationByToken(String jwtToken) {
124+
String email = getEmailFromToken(jwtToken);
118125
UserDetails userDetails = customUserDetailsService.loadUserByUsername(email);
119126
return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
120127
}

src/main/java/com/example/ai_tutor/global/config/security/token/JwtAuthenticationFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
3030
String jwt = getJwtFromRequest(request);
3131

3232
if (StringUtils.hasText(jwt) && customTokenProviderService.validateToken(jwt)) {
33-
UsernamePasswordAuthenticationToken authentication = customTokenProviderService.getAuthenticationByEmail(jwt);
33+
UsernamePasswordAuthenticationToken authentication = customTokenProviderService.getAuthenticationByToken(jwt);
3434
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
3535
SecurityContextHolder.getContext().setAuthentication(authentication);
3636
}

0 commit comments

Comments
 (0)