From 8811e4ec32822532e67867567d033d184cbf9216 Mon Sep 17 00:00:00 2001 From: heejjinkim <06.hjhj.12@gmail.com> Date: Sun, 8 Sep 2024 02:23:46 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20subject=20=EA=B0=92=20providerId?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit providerId 인덱스도 추가 related to: #11 --- .../_119/wepro/auth/jwt/JwtTokenProvider.java | 22 +++++++++---------- .../_119/wepro/auth/service/AuthService.java | 6 ++--- .../wepro/auth/service/RefreshService.java | 9 ++++---- .../com/_119/wepro/member/domain/Member.java | 9 +++++++- .../domain/repository/MemberRepository.java | 3 +++ 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/_119/wepro/auth/jwt/JwtTokenProvider.java b/src/main/java/com/_119/wepro/auth/jwt/JwtTokenProvider.java index e830ba2..c95870c 100644 --- a/src/main/java/com/_119/wepro/auth/jwt/JwtTokenProvider.java +++ b/src/main/java/com/_119/wepro/auth/jwt/JwtTokenProvider.java @@ -4,9 +4,9 @@ import static com._119.wepro.global.exception.errorcode.CommonErrorCode.INVALID_TOKEN; import com._119.wepro.auth.dto.response.TokenInfo; -import com._119.wepro.global.util.RedisUtil; import com._119.wepro.global.enums.Role; import com._119.wepro.global.exception.RestApiException; +import com._119.wepro.global.util.RedisUtil; import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.JwtException; @@ -43,12 +43,12 @@ public JwtTokenProvider(@Value("${jwt.secret}") String key, RedisUtil redisUtil) this.secretKey = Keys.hmacShaKeyFor(keyBytes); } - public TokenInfo generateToken(Long memberId, Role memberRole) { - String accessToken = generateAccessToken(memberId, memberRole); + public TokenInfo generateToken(String providerId, Role memberRole) { + String accessToken = generateAccessToken(providerId, memberRole); String refreshToken = generateRefreshToken(); - deleteInvalidRefreshToken(memberId.toString()); - redisUtil.setData(memberId.toString(), refreshToken); + deleteInvalidRefreshToken(providerId); + redisUtil.setData(providerId, refreshToken); return new TokenInfo("Bearer", accessToken, refreshToken); } @@ -112,12 +112,12 @@ private Claims parseClaims(String accessToken) { } } - private String generateAccessToken(Long memberId, Role memberRole) { + private String generateAccessToken(String providerId, Role memberRole) { Date now = new Date(); Date expiredDate = new Date(now.getTime() + ACCESS_TOKEN_DURATION); return Jwts.builder() - .setSubject(memberId.toString()) + .setSubject(providerId) .claim(AUTHORITIES_KEY, memberRole.name()) .setIssuedAt(now) .setExpiration(expiredDate) @@ -140,12 +140,12 @@ private List getAuthorities(Claims claims) { claims.get(AUTHORITIES_KEY).toString())); } - public String getRefreshToken(String memberId){ - return redisUtil.getData(memberId); + public String getRefreshToken(String provierId) { + return redisUtil.getData(provierId); } - public void deleteInvalidRefreshToken(String memberId) { - redisUtil.deleteData(memberId); + public void deleteInvalidRefreshToken(String provierId) { + redisUtil.deleteData(provierId); } public Claims parseExpiredToken(String token) { diff --git a/src/main/java/com/_119/wepro/auth/service/AuthService.java b/src/main/java/com/_119/wepro/auth/service/AuthService.java index 09903f8..865bde6 100644 --- a/src/main/java/com/_119/wepro/auth/service/AuthService.java +++ b/src/main/java/com/_119/wepro/auth/service/AuthService.java @@ -46,15 +46,15 @@ public SignInResponse signIn(SignInRequest request) { OidcUser oidcDecodePayload = socialLogin(request); Member member = getOrSaveUser(request, oidcDecodePayload); - TokenInfo tokenInfo = jwtTokenProvider.generateToken(member.getId(), member.getRole()); + TokenInfo tokenInfo = jwtTokenProvider.generateToken(member.getProviderId(), member.getRole()); boolean isNewMember = Role.GUEST == member.getRole(); return new SignInResponse(isNewMember, tokenInfo); } @Transactional - public void logOut(String memberId) { - jwtTokenProvider.deleteInvalidRefreshToken(memberId); + public void logOut(String providerId) { + jwtTokenProvider.deleteInvalidRefreshToken(providerId); } diff --git a/src/main/java/com/_119/wepro/auth/service/RefreshService.java b/src/main/java/com/_119/wepro/auth/service/RefreshService.java index a569541..ed0d865 100644 --- a/src/main/java/com/_119/wepro/auth/service/RefreshService.java +++ b/src/main/java/com/_119/wepro/auth/service/RefreshService.java @@ -30,13 +30,14 @@ public TokenInfo refresh(RefreshRequest request) { if (!isTokenExpired(accessToken)) { throw new RestApiException(REFRESH_DENIED); } - String memberId = jwtTokenProvider.parseExpiredToken(accessToken) + String providerId = jwtTokenProvider.parseExpiredToken(accessToken) .getSubject(); - Member member = memberRepository.findById(Long.parseLong(memberId)) + validateRefreshToken(refreshToken, providerId); + + Member member = memberRepository.findByProviderId(providerId) .orElseThrow(() -> new RestApiException(UserErrorCode.USER_NOT_FOUND)); - validateRefreshToken(refreshToken, memberId); - return jwtTokenProvider.generateToken(Long.parseLong(memberId), member.getRole()); + return jwtTokenProvider.generateToken(providerId, member.getRole()); } private boolean isTokenExpired(String accessToken) { diff --git a/src/main/java/com/_119/wepro/member/domain/Member.java b/src/main/java/com/_119/wepro/member/domain/Member.java index 82c4c43..f7125c1 100644 --- a/src/main/java/com/_119/wepro/member/domain/Member.java +++ b/src/main/java/com/_119/wepro/member/domain/Member.java @@ -1,10 +1,10 @@ package com._119.wepro.member.domain; +import com._119.wepro.auth.dto.request.AuthRequest.SignInRequest; import com._119.wepro.global.BaseEntity; import com._119.wepro.global.enums.Provider; import com._119.wepro.global.enums.Role; import com._119.wepro.global.enums.Status; -import com._119.wepro.auth.dto.request.AuthRequest.SignInRequest; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -12,7 +12,9 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Index; import jakarta.persistence.PostPersist; +import jakarta.persistence.Table; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -26,6 +28,11 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Builder +@Table( + indexes = { + @Index(name = "idx_provider_id", columnList = "providerId") + } +) public class Member extends BaseEntity { @Id diff --git a/src/main/java/com/_119/wepro/member/domain/repository/MemberRepository.java b/src/main/java/com/_119/wepro/member/domain/repository/MemberRepository.java index a3b4973..bd3d0cd 100644 --- a/src/main/java/com/_119/wepro/member/domain/repository/MemberRepository.java +++ b/src/main/java/com/_119/wepro/member/domain/repository/MemberRepository.java @@ -8,5 +8,8 @@ @Repository public interface MemberRepository extends JpaRepository { + Optional findByProviderAndProviderId(Provider provider, String providerId); + + Optional findByProviderId(String providerId); }