From e5184c5d2badc12e0f94d1397029e4635a14e6a5 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 04:03:07 +0900 Subject: [PATCH 01/18] =?UTF-8?q?Feat:=20NaverOauth=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ustory/global/oauth/naver/NaverOauth.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java new file mode 100644 index 00000000..21189395 --- /dev/null +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java @@ -0,0 +1,26 @@ +package com.elice.ustory.global.oauth.naver; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@Getter +public class NaverOauth { + @Value("${naver.clientId}") + private String naverClientId; + + @Value("${naver.secret}") + private String naverSecretKey; + + @Value("${naver.loginRedirectUri}") + private String naverLoginRedirectUri; + + @Value("${naver.logoutRedirectUri}") + private String naverLogoutRedirectUri; + + @Value("${naver.requestTokenUri}") + private String naverTokenUri; +} From 0d57692b2b3b3154f6566cee21983ad895a4c8db Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 04:18:51 +0900 Subject: [PATCH 02/18] =?UTF-8?q?Feat:=20NaverOauth=20=EB=82=B4=EB=B6=80?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ustory/global/oauth/naver/NaverOauth.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java index 21189395..04788aca 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java @@ -1,9 +1,18 @@ package com.elice.ustory.global.oauth.naver; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; @Slf4j @Component @@ -23,4 +32,24 @@ public class NaverOauth { @Value("${naver.requestTokenUri}") private String naverTokenUri; + + public String getNaverToken(String code, String state){ + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("grant_type", "authorization_code"); + params.add("client_id", naverClientId); + params.add("client_secret", naverSecretKey); + params.add("code", code); + params.add("state", state); + + HttpEntity> naverTokenRequest = new HttpEntity<>(params, headers); + ResponseEntity response = restTemplate.exchange(naverTokenUri, HttpMethod.POST, naverTokenRequest, String.class); + + String responseBody = response.getBody(); + JsonObject asJsonObject = null; + if(responseBody != null) asJsonObject = JsonParser.parseString(responseBody).getAsJsonObject(); + return asJsonObject.get("access_token").getAsString(); + } } From ae01946e6d380b9563d42c05b4467b971c3db313 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 04:50:47 +0900 Subject: [PATCH 03/18] =?UTF-8?q?Feat:=20NaverOauth=20getUserInfo=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ustory/global/oauth/naver/NaverOauth.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java index 04788aca..a4905390 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java @@ -1,5 +1,6 @@ package com.elice.ustory.global.oauth.naver; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import lombok.Getter; @@ -14,6 +15,8 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; +import java.util.HashMap; + @Slf4j @Component @Getter @@ -30,9 +33,12 @@ public class NaverOauth { @Value("${naver.logoutRedirectUri}") private String naverLogoutRedirectUri; - @Value("${naver.requestTokenUri}") + @Value("${naver.tokenUri}") private String naverTokenUri; + @Value("${naver.userInfo}") + private String userInfoUri; + public String getNaverToken(String code, String state){ RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); @@ -52,4 +58,27 @@ public String getNaverToken(String code, String state){ if(responseBody != null) asJsonObject = JsonParser.parseString(responseBody).getAsJsonObject(); return asJsonObject.get("access_token").getAsString(); } + + public HashMap getUserInfoFromNaverToken(String accessToken){ + HashMap userInfo = new HashMap<>(); + + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.add("Authorization", "Bearer " + accessToken); + + HttpEntity> naverUserInfoRequest = new HttpEntity<>(headers); + + ResponseEntity response = restTemplate.exchange(userInfoUri, HttpMethod.POST, naverUserInfoRequest, String.class); + log.info("response = {}", response); + + JsonElement element = JsonParser.parseString(response.getBody()); + + String id = element.getAsJsonObject().get("response").getAsJsonObject().get("id").getAsString(); + String nickname = element.getAsJsonObject().get("response").getAsJsonObject().get("id").getAsString(); + + userInfo.put("id", id); + userInfo.put("nickname", nickname); + + return userInfo; + } } From 26e294ff19c07520f465a04575ee0f05c2285aef Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 04:57:48 +0900 Subject: [PATCH 04/18] =?UTF-8?q?Refactor:=20generateRandomPostFix=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/oauth/kakao/KakaoService.java | 18 +++------------- .../ustory/global/util/RandomGenerator.java | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/elice/ustory/global/util/RandomGenerator.java diff --git a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java index 290a0141..64e37ada 100644 --- a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java +++ b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java @@ -17,13 +17,13 @@ import com.elice.ustory.global.jwt.JwtUtil; import com.elice.ustory.global.redis.kakao.KakaoTokenService; import com.elice.ustory.global.redis.refresh.RefreshTokenService; +import com.elice.ustory.global.util.RandomGenerator; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.Random; import java.util.UUID; @Service @@ -39,10 +39,11 @@ public class KakaoService { private final JwtUtil jwtUtil; private final KakaoOauth kakaoOauth; private final UserService userService; + private final RandomGenerator randomGenerator; public void kakaoSignUp(String kakaoUserId, String kakaoNickname){ String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8); - String generatedNickname = kakaoNickname + "#" + generateRandomPostfix(); + String generatedNickname = kakaoNickname + "#" + randomGenerator.generateRandomPostfix(); Users builtUser = Users.addUserBuilder() .email(kakaoUserId+"@ustory.com") @@ -98,17 +99,4 @@ public LogoutResponse kakaoLogout(HttpServletRequest request) { return LogoutResponse.builder().success(true).build(); } - - public String generateRandomPostfix() { - int leftLimit = 48; // 숫자 '0'의 ASCII 코드 - int rightLimit = 122; // 알파벳 'z'의 ASCII 코드 - int stringLength = 4; - Random random = new Random(); - - return random.ints(leftLimit, rightLimit + 1) // leftLimit(포함) 부터 rightLimit+1(불포함) 사이의 난수 스트림 생성 - .filter(i -> (i < 57 || i >= 65) && ( i <= 90 || i >= 97)) // ASCII 테이블에서 숫자, 대문자, 소문자만 사용함 - .limit(stringLength) // 생성된 난수를 지정된 길이로 잘라냄 - .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) // 생성된 난수를 ASCII 테이블에서 대응되는 문자로 변환 - .toString(); // StringBuilder 객체를 문자열로 변환해 반환 - } } diff --git a/src/main/java/com/elice/ustory/global/util/RandomGenerator.java b/src/main/java/com/elice/ustory/global/util/RandomGenerator.java new file mode 100644 index 00000000..b0957aa7 --- /dev/null +++ b/src/main/java/com/elice/ustory/global/util/RandomGenerator.java @@ -0,0 +1,21 @@ +package com.elice.ustory.global.util; + +import org.springframework.stereotype.Component; + +import java.util.Random; + +@Component +public class RandomGenerator { + public String generateRandomPostfix() { + int leftLimit = 48; // 숫자 '0'의 ASCII 코드 + int rightLimit = 122; // 알파벳 'z'의 ASCII 코드 + int stringLength = 4; + Random random = new Random(); + + return random.ints(leftLimit, rightLimit + 1) // leftLimit(포함) 부터 rightLimit+1(불포함) 사이의 난수 스트림 생성 + .filter(i -> (i < 57 || i >= 65) && ( i <= 90 || i >= 97)) // ASCII 테이블에서 숫자, 대문자, 소문자만 사용함 + .limit(stringLength) // 생성된 난수를 지정된 길이로 잘라냄 + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) // 생성된 난수를 ASCII 테이블에서 대응되는 문자로 변환 + .toString(); // StringBuilder 객체를 문자열로 변환해 반환 + } +} From 5e3c546af5d802971cbcb8e65a05086465a119e7 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 05:09:41 +0900 Subject: [PATCH 05/18] =?UTF-8?q?Fix:=20=EC=86=8C=EC=85=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=A6=9D=EC=84=A4=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20createAccessTokenKakao=20->=20createAccessTokenSoci?= =?UTF-8?q?al=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/elice/ustory/global/jwt/JwtTokenProvider.java | 4 ++-- src/main/java/com/elice/ustory/global/jwt/JwtUtil.java | 4 ++-- .../com/elice/ustory/global/oauth/kakao/KakaoService.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java b/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java index 2d40c739..cfe0f4b1 100644 --- a/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java +++ b/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java @@ -44,11 +44,11 @@ public String createAccessToken(Long userId) { .compact(); } - public String createAccessTokenKakao(Long userId, String kakaoAccessToken, Users.LoginType loginType) { + public String createAccessTokenSocial(Long userId, String accessToken, Users.LoginType loginType) { Claims claims = Jwts.claims(); Date now = new Date(); claims.put("userId", userId); - claims.put("kakao", kakaoAccessToken); + claims.put("soicalToken", accessToken); claims.put("loginType", loginType); log.info("[createKakaoAccessToken] access 토큰(kakao 로그인) 생성 완료"); return Jwts.builder() diff --git a/src/main/java/com/elice/ustory/global/jwt/JwtUtil.java b/src/main/java/com/elice/ustory/global/jwt/JwtUtil.java index 6480c979..8c77a48b 100644 --- a/src/main/java/com/elice/ustory/global/jwt/JwtUtil.java +++ b/src/main/java/com/elice/ustory/global/jwt/JwtUtil.java @@ -100,9 +100,9 @@ public long getRemainingTTL(String jwtToken) { return Math.max(remainingMillis, 0) / 1000; } - public String getKakaoToken(String jwtToken){ + public String getSocialToken(String jwtToken){ Jws claims = Jwts.parserBuilder().setSigningKey(jwtTokenProvider.getSecretKey()).build() .parseClaimsJws(jwtToken); - return claims.getBody().get("kakao").toString(); + return claims.getBody().get("socialToken").toString(); } } diff --git a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java index 64e37ada..ccc78531 100644 --- a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java +++ b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java @@ -72,7 +72,7 @@ public LoginResponse kakaoLogin(String kakaoUserId, HttpServletResponse response Users loginUser = userRepository.findByEmail(kakaoUserId+"@ustory.com") .orElseThrow(() -> new NotFoundException("해당 유저를 찾을 수 없습니다.")); - String accessToken = jwtTokenProvider.createAccessTokenKakao(loginUser.getId(), kakaoToken, loginUser.getLoginType()); + String accessToken = jwtTokenProvider.createAccessTokenSocial(loginUser.getId(), kakaoToken, loginUser.getLoginType()); String refreshToken = jwtTokenProvider.createRefreshToken(); LoginResponse loginResponse = LoginResponse.builder() @@ -92,7 +92,7 @@ public LoginResponse kakaoLogin(String kakaoUserId, HttpServletResponse response public LogoutResponse kakaoLogout(HttpServletRequest request) { String accessToken = jwtUtil.getTokenFromRequest(request); - String kakaoToken = jwtUtil.getKakaoToken(accessToken); + String kakaoToken = jwtUtil.getSocialToken(accessToken); kakaoOauth.expireKakaoToken(kakaoToken); kakaoTokenService.removeKakaoTokenInfo(accessToken); userService.logout(request); From a7fc065ffd4adc99f7d397ae30ee1834ab5d86e4 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 05:14:59 +0900 Subject: [PATCH 06/18] =?UTF-8?q?Feat:=20Redis=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=82=B4=20NaverToken=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ustory/global/redis/naver/NaverToken.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/elice/ustory/global/redis/naver/NaverToken.java diff --git a/src/main/java/com/elice/ustory/global/redis/naver/NaverToken.java b/src/main/java/com/elice/ustory/global/redis/naver/NaverToken.java new file mode 100644 index 00000000..d3268fe2 --- /dev/null +++ b/src/main/java/com/elice/ustory/global/redis/naver/NaverToken.java @@ -0,0 +1,21 @@ +package com.elice.ustory.global.redis.naver; + +import jakarta.persistence.Id; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.redis.core.RedisHash; +import org.springframework.data.redis.core.index.Indexed; + +@RedisHash(value = "naverToken", timeToLive = 60 * 60 * 24 * 7) +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class NaverToken { + @Id + private String id; + private String naverToken; + + @Indexed + private String accessToken; +} From 353df81797adf85950763914f963767ff50d0cfe Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 05:15:18 +0900 Subject: [PATCH 07/18] =?UTF-8?q?Feat:=20Redis=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=82=B4=20NaverToken=20repository=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/redis/naver/NaverTokenRepository.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java diff --git a/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java b/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java new file mode 100644 index 00000000..a76ea0e6 --- /dev/null +++ b/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java @@ -0,0 +1,10 @@ +package com.elice.ustory.global.redis.naver; + +import com.elice.ustory.global.redis.kakao.KakaoToken; +import org.springframework.data.repository.CrudRepository; + +import java.util.Optional; + +public interface NaverTokenRepository extends CrudRepository { + Optional findByAccessToken(String accessToken); +} From 3ab1782809379fe551f323ec6741443a531c6d15 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 05:15:29 +0900 Subject: [PATCH 08/18] =?UTF-8?q?Feat:=20Redis=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=82=B4=20NaverToken=20service=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/redis/naver/NaverTokenService.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/com/elice/ustory/global/redis/naver/NaverTokenService.java diff --git a/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenService.java b/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenService.java new file mode 100644 index 00000000..ef71e3f4 --- /dev/null +++ b/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenService.java @@ -0,0 +1,25 @@ +package com.elice.ustory.global.redis.naver; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class NaverTokenService { + private final NaverTokenRepository naverTokenRepository; + + public void saveNaverTokenInfo(Long userId, String naverToken, String accessToken) { + naverTokenRepository.save(new NaverToken(String.valueOf(userId), naverToken, accessToken)); + } + + public void removeNaverTokenInfo(String accessToken) { + naverTokenRepository.findByAccessToken(accessToken) + .ifPresent(naverTokenRepository::delete); + } + + public Optional getByAccessToken(String accessToken){ + return naverTokenRepository.findByAccessToken(accessToken); + } +} From 614058234e744c02de2b0c7d4aa14fd0bafbf15c Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 05:19:00 +0900 Subject: [PATCH 09/18] =?UTF-8?q?Feat:=20NaverService=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/oauth/naver/NaverService.java | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java new file mode 100644 index 00000000..cf6cb750 --- /dev/null +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java @@ -0,0 +1,99 @@ +package com.elice.ustory.global.oauth.naver; + +import com.elice.ustory.domain.diary.entity.Color; +import com.elice.ustory.domain.diary.entity.Diary; +import com.elice.ustory.domain.diary.entity.DiaryCategory; +import com.elice.ustory.domain.diary.repository.DiaryRepository; +import com.elice.ustory.domain.diaryUser.entity.DiaryUser; +import com.elice.ustory.domain.diaryUser.entity.DiaryUserId; +import com.elice.ustory.domain.diaryUser.repository.DiaryUserRepository; +import com.elice.ustory.domain.user.dto.LoginResponse; +import com.elice.ustory.domain.user.dto.LogoutResponse; +import com.elice.ustory.domain.user.entity.Users; +import com.elice.ustory.domain.user.repository.UserRepository; +import com.elice.ustory.domain.user.service.UserService; +import com.elice.ustory.global.exception.model.NotFoundException; +import com.elice.ustory.global.jwt.JwtTokenProvider; +import com.elice.ustory.global.jwt.JwtUtil; +import com.elice.ustory.global.redis.naver.NaverTokenService; +import com.elice.ustory.global.redis.refresh.RefreshTokenService; +import com.elice.ustory.global.util.RandomGenerator; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +@Service +@Slf4j +@RequiredArgsConstructor +public class NaverService { + private final UserRepository userRepository; + private final DiaryRepository diaryRepository; + private final DiaryUserRepository diaryUserRepository; + private final UserService userService; + private final RefreshTokenService refreshTokenService; + private final NaverTokenService naverTokenService; + private final JwtTokenProvider jwtTokenProvider; + private final JwtUtil jwtUtil; + private final RandomGenerator randomGenerator; + + public void naverSignUp(String naverUserId, String naverNickname){ + String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8); + String generatedNickname = naverNickname + "#" + randomGenerator.generateRandomPostfix(); + + Users builtUser = Users.addUserBuilder() + .email(naverUserId+"@ustory.com") + .loginType(Users.LoginType.NAVER) + .name(naverNickname) + .nickname(generatedNickname) + .password(randomPassword) + .profileImgUrl("") + .profileDescription("자기소개") + .build(); + + userRepository.save(builtUser); + + Diary userDiary = new Diary( + String.format("%s의 다이어리", builtUser.getNickname()), + "기본 DiaryImgUrl", + DiaryCategory.INDIVIDUAL, + String.format("%s의 개인 다이어리", builtUser.getNickname()), + Color.RED + ); + diaryRepository.save(userDiary); + diaryUserRepository.save(new DiaryUser(new DiaryUserId(userDiary,builtUser))); + } + + public LoginResponse naverLogin(String naverUserId, HttpServletResponse response, String naverToken){ + Users loginUser = userRepository.findByEmail(naverUserId+"@ustory.com") + .orElseThrow(() -> new NotFoundException("해당 유저를 찾을 수 없습니다.")); + + String accessToken = jwtTokenProvider.createAccessTokenSocial(loginUser.getId(), naverToken, loginUser.getLoginType()); + String refreshToken = jwtTokenProvider.createRefreshToken(); + + LoginResponse loginResponse = LoginResponse.builder() + .accessToken(accessToken) + .refreshToken(refreshToken) + .build(); + + log.info("[getLogInResult] LogInResponse 객체에 값 주입"); + response.addHeader("Authorization", accessToken); + + refreshTokenService.saveTokenInfo(loginUser.getId(), refreshToken, accessToken, 60 * 60 * 24 * 7); + naverTokenService.saveNaverTokenInfo(loginUser.getId(), naverToken, accessToken); + + log.info("[logIn] 정상적으로 로그인되었습니다. id : {}, toke n : {}", loginUser.getId(), loginResponse.getAccessToken()); + return loginResponse; + } + + public LogoutResponse naverLogout(HttpServletRequest request) { + String accessToken = jwtUtil.getTokenFromRequest(request); + naverTokenService.removeNaverTokenInfo(accessToken); + userService.logout(request); + + return LogoutResponse.builder().success(true).build(); + } +} From da06f0005ed234749c5bf313e598b4c94b4cdb4b Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 05:20:33 +0900 Subject: [PATCH 10/18] =?UTF-8?q?Fix:=20=EB=B6=88=ED=95=84=EC=9A=94=20impo?= =?UTF-8?q?rt=EB=AC=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elice/ustory/global/redis/naver/NaverTokenRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java b/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java index a76ea0e6..06e5e922 100644 --- a/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java +++ b/src/main/java/com/elice/ustory/global/redis/naver/NaverTokenRepository.java @@ -1,6 +1,5 @@ package com.elice.ustory.global.redis.naver; -import com.elice.ustory.global.redis.kakao.KakaoToken; import org.springframework.data.repository.CrudRepository; import java.util.Optional; From 9732178a57307264c2147ba2843493c01a53b283 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 05:54:09 +0900 Subject: [PATCH 11/18] =?UTF-8?q?Feat:=20NaverController=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/oauth/kakao/KakaoController.java | 4 +- .../global/oauth/naver/NaverController.java | 84 +++++++++++++++++++ 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java diff --git a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoController.java b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoController.java index 06477b20..802face5 100644 --- a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoController.java +++ b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoController.java @@ -64,8 +64,8 @@ public ResponseEntity kakaoLogin(@RequestParam String code, HttpS @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))) }) - @RequestMapping(value = "/auth/logout", method = {RequestMethod.GET, RequestMethod.POST}) - public ResponseEntity KakaoLogout(HttpServletRequest request) { + @RequestMapping(value = "/auth/logout/kakao", method = {RequestMethod.GET, RequestMethod.POST}) + public ResponseEntity kakaoLogout(HttpServletRequest request) { LogoutResponse logoutResponse = kakaoService.kakaoLogout(request); return ResponseEntity.ok().body(logoutResponse); } diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java new file mode 100644 index 00000000..b3257070 --- /dev/null +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java @@ -0,0 +1,84 @@ +package com.elice.ustory.global.oauth.naver; + +import com.elice.ustory.domain.user.dto.LoginResponse; +import com.elice.ustory.domain.user.dto.LogoutResponse; +import com.elice.ustory.domain.user.service.UserService; +import com.elice.ustory.global.exception.dto.ErrorResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.HashMap; + +@Tag(name = "NAVER", description = "NAVER OAUTH API") +@Controller +@Slf4j +@RequestMapping +@RequiredArgsConstructor +public class NaverController { + private final NaverOauth naverOauth; + private final NaverService naverService; + private final UserService userService; + + @Operation(summary = "KAKAO LOGIN API", description = "카카오 로그인") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "Ok", content = @Content(mediaType = "application/json", schema = @Schema(implementation = LoginResponse.class))), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))) + }) + + @GetMapping("login") + public String login(Model model){ + model.addAttribute("naverClientId", naverOauth.getNaverClientId()); + model.addAttribute("redirectUri", naverOauth.getNaverLoginRedirectUri()); + model.addAttribute("redirectLogoutUri", naverOauth.getNaverLogoutRedirectUri()); + model.addAttribute("state", "STATE_STRING"); + return "login/login"; + } + + @RequestMapping(value = "/login/oauth2/code/naver", method = {RequestMethod.GET, RequestMethod.POST}) + public ResponseEntity naverLogin(@RequestParam(name = "code") String code, + @RequestParam(name = "state") String state, + HttpServletResponse response) { + String naverAccessToken = naverOauth.getNaverToken(code, state); + HashMap userInfo = naverOauth.getUserInfoFromNaverToken(naverAccessToken); + + String id = (String) userInfo.get("id"); + String nickname = (String) userInfo.get("nickname"); + + if(!userService.checkExistByEmail(id + "@ustory.com")){ + naverService.naverSignUp(id, nickname); + } + + LoginResponse loginResponse = naverService.naverLogin(id, response, naverAccessToken); + + log.info("[naverLogin] 네이버 닉네임: {}", nickname); + return ResponseEntity.ok().body(loginResponse); + } + + @Operation(summary = "NAVER LOGOUT API", description = "카카오 로그아웃") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "Ok", content = @Content(mediaType = "application/json", schema = @Schema(implementation = LogoutResponse.class))), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))) + }) + @RequestMapping(value = "/auth/logout/naver", method = {RequestMethod.GET, RequestMethod.POST}) + public ResponseEntity naverLogout(HttpServletRequest request) { + LogoutResponse logoutResponse = naverService.naverLogout(request); + return ResponseEntity.ok().body(logoutResponse); + } +} From 185e7eef15a026b174a423e5b9a0ae772680f8b3 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Thu, 4 Jul 2024 15:42:45 +0900 Subject: [PATCH 12/18] =?UTF-8?q?Fix:=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EC=9C=A0=EC=A0=80=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EB=B0=9B=EC=9D=84=20=EC=8B=9C=20=EC=9D=B8=EC=BD=94=EB=94=A9=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ustory/global/oauth/naver/NaverController.java | 6 +++--- .../elice/ustory/global/oauth/naver/NaverOauth.java | 11 ++++++++--- .../elice/ustory/global/oauth/naver/NaverService.java | 10 +++++----- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java index b3257070..cecff24f 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java @@ -60,11 +60,11 @@ public ResponseEntity naverLogin(@RequestParam(name = "code") Str String id = (String) userInfo.get("id"); String nickname = (String) userInfo.get("nickname"); - if(!userService.checkExistByEmail(id + "@ustory.com")){ - naverService.naverSignUp(id, nickname); + if(!userService.checkExistByEmail(nickname + "@ustory.com")){ + naverService.naverSignUp(nickname); } - LoginResponse loginResponse = naverService.naverLogin(id, response, naverAccessToken); + LoginResponse loginResponse = naverService.naverLogin(nickname, response, naverAccessToken); log.info("[naverLogin] 네이버 닉네임: {}", nickname); return ResponseEntity.ok().body(loginResponse); diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java index a4905390..f1a0a6d4 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java @@ -15,7 +15,9 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; +import java.nio.charset.StandardCharsets; import java.util.HashMap; +import java.util.Objects; @Slf4j @Component @@ -70,11 +72,14 @@ public HashMap getUserInfoFromNaverToken(String accessToken){ ResponseEntity response = restTemplate.exchange(userInfoUri, HttpMethod.POST, naverUserInfoRequest, String.class); log.info("response = {}", response); - - JsonElement element = JsonParser.parseString(response.getBody()); + String responseBody = response.getBody(); + if(responseBody != null){ + responseBody = new String(responseBody.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + } + JsonElement element = JsonParser.parseString(Objects.requireNonNull(responseBody)); String id = element.getAsJsonObject().get("response").getAsJsonObject().get("id").getAsString(); - String nickname = element.getAsJsonObject().get("response").getAsJsonObject().get("id").getAsString(); + String nickname = element.getAsJsonObject().get("response").getAsJsonObject().get("nickname").getAsString(); userInfo.put("id", id); userInfo.put("nickname", nickname); diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java index cf6cb750..42484d38 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java @@ -40,12 +40,12 @@ public class NaverService { private final JwtUtil jwtUtil; private final RandomGenerator randomGenerator; - public void naverSignUp(String naverUserId, String naverNickname){ + public void naverSignUp(String naverNickname){ String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8); String generatedNickname = naverNickname + "#" + randomGenerator.generateRandomPostfix(); Users builtUser = Users.addUserBuilder() - .email(naverUserId+"@ustory.com") + .email(naverNickname+"@ustory.com") .loginType(Users.LoginType.NAVER) .name(naverNickname) .nickname(generatedNickname) @@ -67,8 +67,8 @@ public void naverSignUp(String naverUserId, String naverNickname){ diaryUserRepository.save(new DiaryUser(new DiaryUserId(userDiary,builtUser))); } - public LoginResponse naverLogin(String naverUserId, HttpServletResponse response, String naverToken){ - Users loginUser = userRepository.findByEmail(naverUserId+"@ustory.com") + public LoginResponse naverLogin(String naverNickname, HttpServletResponse response, String naverToken){ + Users loginUser = userRepository.findByEmail(naverNickname + "@ustory.com") .orElseThrow(() -> new NotFoundException("해당 유저를 찾을 수 없습니다.")); String accessToken = jwtTokenProvider.createAccessTokenSocial(loginUser.getId(), naverToken, loginUser.getLoginType()); @@ -85,7 +85,7 @@ public LoginResponse naverLogin(String naverUserId, HttpServletResponse response refreshTokenService.saveTokenInfo(loginUser.getId(), refreshToken, accessToken, 60 * 60 * 24 * 7); naverTokenService.saveNaverTokenInfo(loginUser.getId(), naverToken, accessToken); - log.info("[logIn] 정상적으로 로그인되었습니다. id : {}, toke n : {}", loginUser.getId(), loginResponse.getAccessToken()); + log.info("[logIn] 정상적으로 로그인되었습니다. id : {}, token : {}", loginUser.getId(), loginResponse.getAccessToken()); return loginResponse; } From 0f76b07b6f1e6cd1f82cdc1f2e954e363cabefb4 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Fri, 5 Jul 2024 10:22:36 +0900 Subject: [PATCH 13/18] =?UTF-8?q?Feat:=20Naver=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=A0=95=EB=B3=B4=20=EC=A4=91=20=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EC=B6=9C=20=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/elice/ustory/global/oauth/naver/NaverOauth.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java index f1a0a6d4..7127982a 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverOauth.java @@ -78,11 +78,11 @@ public HashMap getUserInfoFromNaverToken(String accessToken){ } JsonElement element = JsonParser.parseString(Objects.requireNonNull(responseBody)); - String id = element.getAsJsonObject().get("response").getAsJsonObject().get("id").getAsString(); String nickname = element.getAsJsonObject().get("response").getAsJsonObject().get("nickname").getAsString(); + String email = element.getAsJsonObject().get("response").getAsJsonObject().get("email").getAsString(); - userInfo.put("id", id); userInfo.put("nickname", nickname); + userInfo.put("email", email); return userInfo; } From 755b78ddca50ad6d9b07a061245a1cec1f50bfda Mon Sep 17 00:00:00 2001 From: wambatcode Date: Fri, 5 Jul 2024 10:23:17 +0900 Subject: [PATCH 14/18] =?UTF-8?q?Fix:=20Naver=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=A0=95=EB=B3=B4(=EC=9D=B4=EB=A9=94=EC=9D=BC)=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ustory/global/oauth/naver/NaverController.java | 12 ++++++------ .../ustory/global/oauth/naver/NaverService.java | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java index cecff24f..ff13758a 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java @@ -34,7 +34,7 @@ public class NaverController { private final NaverService naverService; private final UserService userService; - @Operation(summary = "KAKAO LOGIN API", description = "카카오 로그인") + @Operation(summary = "NAVER LOGIN API", description = "네이버 로그인") @ApiResponses({ @ApiResponse(responseCode = "200", description = "Ok", content = @Content(mediaType = "application/json", schema = @Schema(implementation = LoginResponse.class))), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), @@ -57,20 +57,20 @@ public ResponseEntity naverLogin(@RequestParam(name = "code") Str String naverAccessToken = naverOauth.getNaverToken(code, state); HashMap userInfo = naverOauth.getUserInfoFromNaverToken(naverAccessToken); - String id = (String) userInfo.get("id"); String nickname = (String) userInfo.get("nickname"); + String naverEmail = (String) userInfo.get("email"); - if(!userService.checkExistByEmail(nickname + "@ustory.com")){ - naverService.naverSignUp(nickname); + if(!userService.checkExistByEmail(naverEmail)){ + naverService.naverSignUp(nickname, naverEmail); } - LoginResponse loginResponse = naverService.naverLogin(nickname, response, naverAccessToken); + LoginResponse loginResponse = naverService.naverLogin(naverEmail, response, naverAccessToken); log.info("[naverLogin] 네이버 닉네임: {}", nickname); return ResponseEntity.ok().body(loginResponse); } - @Operation(summary = "NAVER LOGOUT API", description = "카카오 로그아웃") + @Operation(summary = "NAVER LOGOUT API", description = "네이버 로그아웃") @ApiResponses({ @ApiResponse(responseCode = "200", description = "Ok", content = @Content(mediaType = "application/json", schema = @Schema(implementation = LogoutResponse.class))), @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java index 42484d38..bf919615 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java @@ -40,12 +40,12 @@ public class NaverService { private final JwtUtil jwtUtil; private final RandomGenerator randomGenerator; - public void naverSignUp(String naverNickname){ + public void naverSignUp(String naverNickname, String naverEmail){ String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8); String generatedNickname = naverNickname + "#" + randomGenerator.generateRandomPostfix(); Users builtUser = Users.addUserBuilder() - .email(naverNickname+"@ustory.com") + .email(naverEmail) .loginType(Users.LoginType.NAVER) .name(naverNickname) .nickname(generatedNickname) @@ -67,8 +67,8 @@ public void naverSignUp(String naverNickname){ diaryUserRepository.save(new DiaryUser(new DiaryUserId(userDiary,builtUser))); } - public LoginResponse naverLogin(String naverNickname, HttpServletResponse response, String naverToken){ - Users loginUser = userRepository.findByEmail(naverNickname + "@ustory.com") + public LoginResponse naverLogin(String naverEmail, HttpServletResponse response, String naverToken){ + Users loginUser = userRepository.findByEmail(naverEmail) .orElseThrow(() -> new NotFoundException("해당 유저를 찾을 수 없습니다.")); String accessToken = jwtTokenProvider.createAccessTokenSocial(loginUser.getId(), naverToken, loginUser.getLoginType()); From a8fe284670371a151e472b051a63389ad7be06d7 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Fri, 5 Jul 2024 10:23:50 +0900 Subject: [PATCH 15/18] =?UTF-8?q?Fix:=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=82=B4=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/elice/ustory/global/jwt/JwtTokenProvider.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java b/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java index cfe0f4b1..1d735164 100644 --- a/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java +++ b/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java @@ -50,14 +50,14 @@ public String createAccessTokenSocial(Long userId, String accessToken, Users.Log claims.put("userId", userId); claims.put("soicalToken", accessToken); claims.put("loginType", loginType); - log.info("[createKakaoAccessToken] access 토큰(kakao 로그인) 생성 완료"); + log.info("[createSocialAccessToken] access 토큰(소셜 로그인) 생성 완료"); return Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(new Date(System.currentTimeMillis() + ACCESSTOKEN_VALID_MILISECOND)) .signWith(secretKey, SignatureAlgorithm.HS256) .compact(); - } //TODO: 코드 중복 되는 부분이 많아서 리팩토링 예정 + } public String createRefreshToken(){ Claims claims = Jwts.claims(); From 6d26914b4d4d3af399e1bf4ffe1c5a2fe2c52f11 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Fri, 5 Jul 2024 10:28:08 +0900 Subject: [PATCH 16/18] =?UTF-8?q?Refactor:=20=EC=86=8C=EC=85=9C=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=9D=B8=EC=BD=94=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/elice/ustory/global/oauth/kakao/KakaoService.java | 5 ++++- .../com/elice/ustory/global/oauth/naver/NaverService.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java index ccc78531..81553179 100644 --- a/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java +++ b/src/main/java/com/elice/ustory/global/oauth/kakao/KakaoService.java @@ -22,6 +22,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.UUID; @@ -40,9 +41,11 @@ public class KakaoService { private final KakaoOauth kakaoOauth; private final UserService userService; private final RandomGenerator randomGenerator; + private final PasswordEncoder passwordEncoder; public void kakaoSignUp(String kakaoUserId, String kakaoNickname){ String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8); + String encodedPassword = passwordEncoder.encode(randomPassword); String generatedNickname = kakaoNickname + "#" + randomGenerator.generateRandomPostfix(); Users builtUser = Users.addUserBuilder() @@ -50,7 +53,7 @@ public void kakaoSignUp(String kakaoUserId, String kakaoNickname){ .loginType(Users.LoginType.KAKAO) .name(kakaoNickname) .nickname(generatedNickname) - .password(randomPassword) + .password(encodedPassword) .profileImgUrl("") .profileDescription("자기소개") .build(); diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java index bf919615..8aa5836c 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverService.java @@ -22,6 +22,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.UUID; @@ -39,9 +40,11 @@ public class NaverService { private final JwtTokenProvider jwtTokenProvider; private final JwtUtil jwtUtil; private final RandomGenerator randomGenerator; + private final PasswordEncoder passwordEncoder; public void naverSignUp(String naverNickname, String naverEmail){ String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8); + String encodedPassword = passwordEncoder.encode(randomPassword); String generatedNickname = naverNickname + "#" + randomGenerator.generateRandomPostfix(); Users builtUser = Users.addUserBuilder() @@ -49,7 +52,7 @@ public void naverSignUp(String naverNickname, String naverEmail){ .loginType(Users.LoginType.NAVER) .name(naverNickname) .nickname(generatedNickname) - .password(randomPassword) + .password(encodedPassword) .profileImgUrl("") .profileDescription("자기소개") .build(); From 0ea4ef15ec357bf5d47577e1cddce361e6a4c549 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Fri, 5 Jul 2024 11:02:20 +0900 Subject: [PATCH 17/18] =?UTF-8?q?Fix:=20=EB=A1=9C=EC=BB=AC=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C=20=EC=99=84=EB=A3=8C=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?Model=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=A0=9C=EA=B1=B0(Thymel?= =?UTF-8?q?eaf=20=EA=B4=80=EB=A0=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elice/ustory/global/oauth/naver/NaverController.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java index ff13758a..a2fb0d5b 100644 --- a/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java +++ b/src/main/java/com/elice/ustory/global/oauth/naver/NaverController.java @@ -41,15 +41,6 @@ public class NaverController { @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))) }) - @GetMapping("login") - public String login(Model model){ - model.addAttribute("naverClientId", naverOauth.getNaverClientId()); - model.addAttribute("redirectUri", naverOauth.getNaverLoginRedirectUri()); - model.addAttribute("redirectLogoutUri", naverOauth.getNaverLogoutRedirectUri()); - model.addAttribute("state", "STATE_STRING"); - return "login/login"; - } - @RequestMapping(value = "/login/oauth2/code/naver", method = {RequestMethod.GET, RequestMethod.POST}) public ResponseEntity naverLogin(@RequestParam(name = "code") String code, @RequestParam(name = "state") String state, From eb4fa8b2a17bdf0326ea79e5ec5e076cde2bdf23 Mon Sep 17 00:00:00 2001 From: wambatcode Date: Fri, 5 Jul 2024 14:45:40 +0900 Subject: [PATCH 18/18] =?UTF-8?q?Fix:=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=82=B4=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java b/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java index 1d735164..49b49d48 100644 --- a/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java +++ b/src/main/java/com/elice/ustory/global/jwt/JwtTokenProvider.java @@ -48,7 +48,7 @@ public String createAccessTokenSocial(Long userId, String accessToken, Users.Log Claims claims = Jwts.claims(); Date now = new Date(); claims.put("userId", userId); - claims.put("soicalToken", accessToken); + claims.put("socialToken", accessToken); claims.put("loginType", loginType); log.info("[createSocialAccessToken] access 토큰(소셜 로그인) 생성 완료"); return Jwts.builder()