From eb2807787cd3b1537a3ea027ed474e43c11f6176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 19 Jan 2026 00:23:15 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9E=87=EC=8A=88=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EA=B4=80=EB=A0=A8=20=EC=97=90=EB=9F=AC=20=EB=A1=9C?= =?UTF-8?q?=EA=B9=85=20+=20email=20unique=20=EC=A0=9C=EC=95=BD=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=A0=9C=EA=B1=B0=20(#334)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: NPE관련 로깅 추가 * refactor: email unique제약 조건 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../auth/entity/SystemAppleAuthenticator.java | 17 +++++++++++++---- .../ssu/eatssu/domain/user/entity/User.java | 1 - .../handler/response/BaseResponseStatus.java | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index 904c99b6..b560e71c 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -25,7 +25,7 @@ import java.util.Base64; import java.util.Map; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; @Component @RequiredArgsConstructor @@ -49,10 +49,19 @@ private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey public .parseClaimsJws(identityToken) .getBody(); - //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. + Object emailObj = claims.get("email"); + Object providerIdObj = claims.get("sub"); + + if (providerIdObj == null) { + throw new BaseException(NOT_FOUND_PROVIDER_ID); + } + if (emailObj == null) { + throw new BaseException(NOT_FOUND_EMAIL); + } + try { - String email = claims.get("email").toString(); - String providerId = claims.get("sub").toString(); + String email = emailObj.toString(); + String providerId = providerIdObj.toString(); return new OAuthInfo(email, providerId); } catch (ExpiredJwtException exception) { throw new BaseException(INVALID_IDENTITY_TOKEN); diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 5dc57fc0..10135982 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -49,7 +49,6 @@ public class User extends BaseTimeEntity { private Long id; @Enumerated(EnumType.STRING) private Role role; - @Column(unique = true) private String email; private String nickname; @Enumerated(EnumType.STRING) diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 6009d49f..4189568e 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -75,6 +75,8 @@ public enum BaseResponseStatus { NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP_RESTAURANT(false, HttpStatus.NOT_FOUND, 40411, "해당 제휴 식당을 찾을 수 없습니다."), INVALID_NICKNAME(false, HttpStatus.NOT_FOUND, 40412, "잘못된 닉네임입니다."), + NOT_FOUND_PROVIDER_ID(false, HttpStatus.NOT_FOUND, 40413, "Claims에서 ProviderId(sub)를 찾을 수 없습니다."), + NOT_FOUND_EMAIL(false, HttpStatus.NOT_FOUND, 40414, "Claims에서 이메일을 찾을 수 없습니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출