Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(#45): redis 모듈 추가 #49

Merged
merged 20 commits into from
Sep 26, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
15ac500
feat(#45): refresh 임시 구현 - Entity 아직 사용 X 수정 예정
jusung-c Sep 17, 2023
bbc3b20
(#45)-RefreshToken 엔티티 & RefreshTokenRepository 구현
jusung-c Sep 19, 2023
855b88b
Merge branch 'refactor(#46)-refreshToken-state-redis' into feat(#45)-…
jusung-c Sep 19, 2023
1343c08
refactor(#45): Refresh Token 구현 수정
jusung-c Sep 20, 2023
3123204
refactor(#46): generateAccessToken 메소드명 변경에 따른 수정
jusung-c Sep 20, 2023
99e38a2
refactor(#45): generateAccessToken 메소드명 변경에 따른 수정
jusung-c Sep 20, 2023
4dcd0bb
test(#45): RefreshTokenRepository 테스트
jusung-c Sep 20, 2023
ec944db
feat(#45): Logout 구현 - Logout 시 Redis에서 RefreshToken 삭제
jusung-c Sep 20, 2023
c9a0b67
test(#45): RefreshTokenService 테스트
jusung-c Sep 20, 2023
0ac592c
Merge remote-tracking branch 'upstream/feat(#45)-heachi-domain-redis'…
jusung-c Sep 20, 2023
e76e51f
Merge branch 'dev' into feat(#45)-heachi-domain-redis
ghdcksgml1 Sep 21, 2023
c4c5801
refactor(#45): refersh 예외 JwtException으로 처리
jusung-c Sep 21, 2023
cc51c39
Merge remote-tracking branch 'upstream/feat(#45)-heachi-domain-redis'…
jusung-c Sep 21, 2023
b3a4c77
refactor(#45):
jusung-c Sep 21, 2023
56b0c57
refactor(#45): 빌드 에러 수정
jusung-c Sep 21, 2023
6504974
refactor(#45): 헤더에서 토큰 추출시 생길 수 있는 OutOfBound 에러 방지
jusung-c Sep 23, 2023
da2175b
feat(#45): AccessToken 재발급 일부 구현
jusung-c Sep 23, 2023
713cda3
refactor(#45): AccessToken 재발급 수정 & 테스트
jusung-c Sep 23, 2023
6a0ceee
refactor(#45): AccessToken 재발급 수정 & 테스트
jusung-c Sep 25, 2023
27c64a8
refactor(#45): 피드백 부분 수정
jusung-c Sep 26, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;


@Slf4j
Expand All @@ -34,12 +36,14 @@ public class AuthService {
private final OAuthService oAuthService;
private final JwtService jwtService;

// 빈 주입이 안됨
private final RedisTemplate redisTemplacte;
// 빈 주입이 안됨
private final RedisTemplate<String, String> redisTemplacte;

private static final String ROLE_CLAIM = "role";
private static final String NAME_CLAIM = "name";
private static final String PROFILE_IMAGE_CLAIM = "profileImageUrl";
private static final String ACCESS_TOKEN = "accessToken";
private static final String REFRESH_TOKEN = "refreshToken";

@Transactional
public AuthServiceLoginResponse login(UserPlatformType platformType, String code, String state) {
Expand All @@ -64,11 +68,15 @@ public AuthServiceLoginResponse login(UserPlatformType platformType, String code
// 기존 회원의 경우 name, profileImageUrl 변하면 update
findUser.updateProfile(loginResponse.getName(), loginResponse.getProfileImageUrl());

// JWT 토큰 발급
final String token = createJwtToken(findUser);
// JWT Access Token 발급
final String accessToken = createJwtToken(findUser).get(ACCESS_TOKEN);

// JWT Refresh Token 발급
final String refreshToken = createJwtToken(findUser).get(REFRESH_TOKEN);

return AuthServiceLoginResponse.builder()
.token(token)
.accessToken(accessToken)
.refreshToken(refreshToken)
.role(findUser.getRole())
.build();
}
Expand All @@ -88,16 +96,20 @@ public AuthServiceLoginResponse register(AuthServiceRegisterRequest request) {
// 회원가입 정보 DB 반영
findUser.updateRegister(request.getRole(), request.getPhoneNumber());

// JWT 토큰 재발급
final String token = createJwtToken(findUser);
// JWT Access Token 재발급
final String accessToken = createJwtToken(findUser).get(ACCESS_TOKEN);

// JWT Refresh Token 재발급
final String refreshToken = createJwtToken(findUser).get(REFRESH_TOKEN);

return AuthServiceLoginResponse.builder()
.token(token)
.accessToken(accessToken)
.refreshToken(refreshToken)
.role(findUser.getRole())
.build();
}

private String createJwtToken(User user) {
private Map<String, String> createJwtToken(User user) {
// JWT 토큰 생성을 위한 claims 생성
HashMap<String, String> claims = new HashMap<>();
claims.put(ROLE_CLAIM, user.getRole().name());
Expand All @@ -110,10 +122,21 @@ private String createJwtToken(User user) {
// Refresh Token 생성
final String refreshToken = jwtService.generateRefreshToken(claims, user);

// Refresh Token 저장
// Refresh Token 저장 - REDIS
redisTemplacte.opsForValue().set(
user.getEmail(),
refreshToken,
jwtService.extractExpiration(refreshToken).getTime(),
TimeUnit.MICROSECONDS
);

final Map<String, String> tokens = new HashMap<String, String>();

// Refresh Token 저장
tokens.put(ACCESS_TOKEN, accessToken);
tokens.put(REFRESH_TOKEN, refreshToken);

// 로그인 반환 객체 생성
return accessToken;
return tokens;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@

@Getter
public class AuthServiceLoginResponse {
private String token;
private String accessToken;
private String refreshToken;
private UserRole role;

@Builder
private AuthServiceLoginResponse(String token, UserRole role) {
this.token = token;
public AuthServiceLoginResponse(String accessToken, String refreshToken, UserRole role) {
this.accessToken = accessToken;
this.refreshToken = refreshToken;
this.role = role;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ private boolean isTokenExpired(String token) {
/*
* Token 정보 추출
*/
private Date extractExpiration(String token) {
public Date extractExpiration(String token) {
return extractClaim(token, Claims::getExpiration);
}

Expand Down