Skip to content

Commit

Permalink
Merge pull request #70 from 28th-meetup/feat/auth-1122
Browse files Browse the repository at this point in the history
refreshtoken 발급 로직 수정
  • Loading branch information
eckrin committed Nov 22, 2023
2 parents 7f7b25e + 2d33a91 commit b1412ce
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QNotification extends EntityPathBase<Notification> {

private static final long serialVersionUID = -150217532L;
private static final long serialVersionUID = -1943879295L;

private static final PathInits INITS = PathInits.DIRECT2;

Expand Down
6 changes: 0 additions & 6 deletions src/main/java/com/kusitms/jipbap/auth/AuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,4 @@ public CommonResponse<KakaoSignInResponseDto> kakaoVerification(@RequestBody Kak
return new CommonResponse<>(authService.kakaoAutoSignIn(authService.getKakaoProfile(dto.getToken())));
}

@Operation(summary = "액세스 토큰 재발급 - 헤더에 refreshToken 정보 포함하여 요청")
@PostMapping("/reissue")
public CommonResponse<ReissueResponseDto> reissue(@Auth AuthInfo authInfo) {
return new CommonResponse<>(authService.reissue(authInfo.getEmail(), authInfo.getToken()));
}

}
21 changes: 0 additions & 21 deletions src/main/java/com/kusitms/jipbap/auth/AuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -164,25 +164,4 @@ public KakaoSignInResponseDto kakaoAutoSignIn(KakaoProfileDto profile) {
findUser.updateOAuth(KAKAO);
return new KakaoSignInResponseDto(signIn(kakaoUser.getEmail(), kakaoUser.getPassword()), isSignUp);
}

/**
* refreshtoken 갱
* @param email
* @param refreshToken
* @return
*/
@Transactional
public ReissueResponseDto reissue(String email, String refreshToken) {
User user = userRepository.findByEmail(email).orElseThrow(()->new InvalidEmailException("회원정보가 존재하지 않습니다."));
if(!user.getRefreshToken().equals(refreshToken)) {
throw new RefreshTokenNotFoundException("리프레쉬 토큰에서 유저정보를 찾을 수 없습니다.");
}
tokenProvider.validateToken(refreshToken);

TokenInfo newAccessToken = tokenProvider.createAccessToken(user.getEmail(), user.getRole());
TokenInfo newRefreshToken = tokenProvider.createRefreshToken(user.getEmail(), user.getRole());
return new ReissueResponseDto(
newAccessToken.getToken(), newRefreshToken.getToken()
);
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/kusitms/jipbap/user/UserController.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.kusitms.jipbap.user;

import com.kusitms.jipbap.auth.dto.ReissueResponseDto;
import com.kusitms.jipbap.common.response.CommonResponse;
import com.kusitms.jipbap.security.Auth;
import com.kusitms.jipbap.security.AuthInfo;
Expand All @@ -18,6 +19,12 @@ public class UserController {

private final UserService userService;

@Operation(summary = "액세스 토큰 재발급 - 헤더에 refreshToken 정보 포함하여 요청")
@PostMapping("/reissue")
public CommonResponse<ReissueResponseDto> reissue(@Auth AuthInfo authInfo) {
return new CommonResponse<>(userService.reissue(authInfo.getEmail(), authInfo.getToken()));
}

@Operation(summary = "로그아웃 - 리프레쉬 토큰 삭제")
@PostMapping("/logout")
public CommonResponse<String> logout(@Auth AuthInfo authInfo) {
Expand Down
26 changes: 26 additions & 0 deletions src/main/java/com/kusitms/jipbap/user/UserService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.kusitms.jipbap.user;

import com.kusitms.jipbap.auth.dto.ReissueResponseDto;
import com.kusitms.jipbap.auth.exception.InvalidEmailException;
import com.kusitms.jipbap.auth.exception.RefreshTokenNotFoundException;
import com.kusitms.jipbap.auth.exception.UsernameExistsException;
import com.kusitms.jipbap.security.jwt.JwtTokenProvider;
import com.kusitms.jipbap.security.jwt.TokenInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -10,6 +14,28 @@
@Service
public class UserService {
private final UserRepository userRepository;
private final JwtTokenProvider tokenProvider;

/**
* refreshtoken 갱신
* @param email
* @param refreshToken
* @return
*/
@Transactional
public ReissueResponseDto reissue(String email, String refreshToken) {
User user = userRepository.findByEmail(email).orElseThrow(()->new InvalidEmailException("회원정보가 존재하지 않습니다."));
if(!user.getRefreshToken().equals(refreshToken)) {
throw new RefreshTokenNotFoundException("리프레쉬 토큰에서 유저정보를 찾을 수 없습니다.");
}
tokenProvider.validateToken(tokenProvider.resolveToken(refreshToken));

TokenInfo newAccessToken = tokenProvider.createAccessToken(user.getEmail(), user.getRole());
TokenInfo newRefreshToken = tokenProvider.createRefreshToken(user.getEmail(), user.getRole());
return new ReissueResponseDto(
newAccessToken.getToken(), newRefreshToken.getToken()
);
}

/**
* 로그아웃 - User의 RefreshToken 제거
Expand Down

0 comments on commit b1412ce

Please sign in to comment.