diff --git a/src/main/java/Gotcha/common/config/SecurityFilterConfig.java b/src/main/java/Gotcha/common/config/SecurityFilterConfig.java index d4e6a283..ddd4bf32 100644 --- a/src/main/java/Gotcha/common/config/SecurityFilterConfig.java +++ b/src/main/java/Gotcha/common/config/SecurityFilterConfig.java @@ -1,26 +1,28 @@ package Gotcha.common.config; -import Gotcha.common.jwt.BlackListTokenService; -import Gotcha.common.jwt.TokenProvider; +import Gotcha.common.jwt.token.BlackListTokenService; +import Gotcha.common.jwt.auth.GuestDetailsService; +import Gotcha.common.jwt.token.TokenProvider; +import Gotcha.common.jwt.auth.UserDetailsServiceImpl; import Gotcha.common.jwt.filter.JwtAuthenticationFilter; import Gotcha.common.jwt.filter.JwtExceptionFilter; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.core.userdetails.UserDetailsService; @Configuration @RequiredArgsConstructor public class SecurityFilterConfig { - private final UserDetailsService userDetailsService; + private final UserDetailsServiceImpl userDetailsService; + private final GuestDetailsService guestDetailsService; private final TokenProvider tokenProvider; private final ObjectMapper objectMapper; private final BlackListTokenService blackListTokenService; @Bean public JwtAuthenticationFilter authenticationFilter() { - return new JwtAuthenticationFilter(userDetailsService, tokenProvider, blackListTokenService); + return new JwtAuthenticationFilter(userDetailsService, guestDetailsService, tokenProvider, blackListTokenService); } @Bean diff --git a/src/main/java/Gotcha/common/jwt/auth/GuestDetailsService.java b/src/main/java/Gotcha/common/jwt/auth/GuestDetailsService.java new file mode 100644 index 00000000..d00dea72 --- /dev/null +++ b/src/main/java/Gotcha/common/jwt/auth/GuestDetailsService.java @@ -0,0 +1,36 @@ +package Gotcha.common.jwt.auth; + +import Gotcha.common.util.RedisUtil; +import Gotcha.domain.user.entity.User; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +import static Gotcha.common.redis.RedisProperties.GUEST_KEY_PREFIX; +import static Gotcha.common.redis.RedisProperties.GUEST_TTL_SECONDS; + +@Service +@RequiredArgsConstructor +public class GuestDetailsService implements UserDetailsService { + private final RedisUtil redisUtil; + + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{ + Long guestId; + try { + guestId = Long.parseLong(username); + } catch (NumberFormatException e) { + throw new UsernameNotFoundException("Invalid guest ID: " + username); + } + + User guest = Optional.ofNullable((User) redisUtil.getData(GUEST_KEY_PREFIX + guestId)) + .orElseThrow(()-> new UsernameNotFoundException("Guest not found : " + guestId)); + + redisUtil.setDataExpire(GUEST_KEY_PREFIX + guestId, GUEST_TTL_SECONDS); + + return new SecurityUserDetails(guest); + } +} diff --git a/src/main/java/Gotcha/common/jwt/SecurityUserDetails.java b/src/main/java/Gotcha/common/jwt/auth/SecurityUserDetails.java similarity index 93% rename from src/main/java/Gotcha/common/jwt/SecurityUserDetails.java rename to src/main/java/Gotcha/common/jwt/auth/SecurityUserDetails.java index abeed6f0..85ff32ee 100644 --- a/src/main/java/Gotcha/common/jwt/SecurityUserDetails.java +++ b/src/main/java/Gotcha/common/jwt/auth/SecurityUserDetails.java @@ -1,4 +1,4 @@ -package Gotcha.common.jwt; +package Gotcha.common.jwt.auth; import Gotcha.common.security.CustomGrantedAuthority; import Gotcha.domain.user.entity.User; @@ -38,6 +38,10 @@ public String getUsername() { return user.getEmail(); } + public String getNickname(){ + return user.getNickname(); + } + public Long getId(){ return user.getId(); } diff --git a/src/main/java/Gotcha/common/jwt/UserDetailsServiceImpl.java b/src/main/java/Gotcha/common/jwt/auth/UserDetailsServiceImpl.java similarity index 96% rename from src/main/java/Gotcha/common/jwt/UserDetailsServiceImpl.java rename to src/main/java/Gotcha/common/jwt/auth/UserDetailsServiceImpl.java index 5eede8a9..c6e61131 100644 --- a/src/main/java/Gotcha/common/jwt/UserDetailsServiceImpl.java +++ b/src/main/java/Gotcha/common/jwt/auth/UserDetailsServiceImpl.java @@ -1,4 +1,4 @@ -package Gotcha.common.jwt; +package Gotcha.common.jwt.auth; import Gotcha.domain.user.entity.User; import Gotcha.domain.user.repository.UserRepository; diff --git a/src/main/java/Gotcha/common/jwt/filter/JwtAuthenticationFilter.java b/src/main/java/Gotcha/common/jwt/filter/JwtAuthenticationFilter.java index 1f446564..b7cf423b 100644 --- a/src/main/java/Gotcha/common/jwt/filter/JwtAuthenticationFilter.java +++ b/src/main/java/Gotcha/common/jwt/filter/JwtAuthenticationFilter.java @@ -1,16 +1,17 @@ package Gotcha.common.jwt.filter; import Gotcha.common.constants.SecurityConstants; -import Gotcha.common.jwt.BlackListTokenService; +import Gotcha.common.jwt.token.BlackListTokenService; import Gotcha.common.jwt.exception.JwtExceptionCode; -import Gotcha.common.jwt.TokenProvider; +import Gotcha.common.jwt.token.TokenProvider; +import Gotcha.domain.user.entity.Role; import io.jsonwebtoken.ExpiredJwtException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; @@ -23,19 +24,33 @@ import java.io.IOException; import java.util.Arrays; -import static Gotcha.common.jwt.JwtProperties.ACCESS_HEADER_VALUE; -import static Gotcha.common.jwt.JwtProperties.TOKEN_PREFIX; +import static Gotcha.common.jwt.token.JwtProperties.ACCESS_HEADER_VALUE; +import static Gotcha.common.jwt.token.JwtProperties.TOKEN_PREFIX; @Slf4j -@RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { private final UserDetailsService userDetailsService; + private final UserDetailsService guestDetailsService; private final TokenProvider tokenProvider; private final BlackListTokenService blackListTokenService; private static final String SPECIAL_CHARACTERS_PATTERN = "[`':;|~!@#$%()^&*+=?/{}\\[\\]\\\"\\\\\"]+$"; private final AntPathMatcher antPathMatcher = new AntPathMatcher(); + public JwtAuthenticationFilter( + @Qualifier("userDetailsServiceImpl") UserDetailsService userDetailsService, + @Qualifier("guestDetailsService") UserDetailsService guestDetailsService, + TokenProvider tokenProvider, + BlackListTokenService blackListTokenService + ) { + this.userDetailsService = userDetailsService; + this.guestDetailsService = guestDetailsService; + this.tokenProvider = tokenProvider; + this.blackListTokenService = blackListTokenService; + } + + + @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { @@ -52,8 +67,16 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse String accessToken = resolveAccessToken(response, accessTokenHeader); - String username = tokenProvider.getEmail(accessToken); - UserDetails userDetails = userDetailsService.loadUserByUsername(username); + String role = tokenProvider.getRole(accessToken); + UserDetails userDetails; + if (role.equals(String.valueOf(Role.GUEST))) { + Long guestId = tokenProvider.getUserId(accessToken); + userDetails = guestDetailsService.loadUserByUsername(guestId.toString()); + } + else{ + String username = tokenProvider.getUsername(accessToken); + userDetails = userDetailsService.loadUserByUsername(username); + } Authentication auth = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(auth); diff --git a/src/main/java/Gotcha/common/jwt/BlackListTokenService.java b/src/main/java/Gotcha/common/jwt/token/BlackListTokenService.java similarity index 96% rename from src/main/java/Gotcha/common/jwt/BlackListTokenService.java rename to src/main/java/Gotcha/common/jwt/token/BlackListTokenService.java index ce3a5f72..f0818781 100644 --- a/src/main/java/Gotcha/common/jwt/BlackListTokenService.java +++ b/src/main/java/Gotcha/common/jwt/token/BlackListTokenService.java @@ -1,4 +1,4 @@ -package Gotcha.common.jwt; +package Gotcha.common.jwt.token; import Gotcha.common.util.RedisUtil; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/Gotcha/common/jwt/JwtHelper.java b/src/main/java/Gotcha/common/jwt/token/JwtHelper.java similarity index 71% rename from src/main/java/Gotcha/common/jwt/JwtHelper.java rename to src/main/java/Gotcha/common/jwt/token/JwtHelper.java index 1908b074..60327388 100644 --- a/src/main/java/Gotcha/common/jwt/JwtHelper.java +++ b/src/main/java/Gotcha/common/jwt/token/JwtHelper.java @@ -1,4 +1,4 @@ -package Gotcha.common.jwt; +package Gotcha.common.jwt.token; import Gotcha.common.exception.CustomException; import Gotcha.common.jwt.exception.JwtExceptionCode; @@ -11,8 +11,8 @@ import java.time.LocalDateTime; -import static Gotcha.common.jwt.JwtProperties.REFRESH_COOKIE_VALUE; -import static Gotcha.common.jwt.JwtProperties.TOKEN_PREFIX; +import static Gotcha.common.jwt.token.JwtProperties.REFRESH_COOKIE_VALUE; +import static Gotcha.common.jwt.token.JwtProperties.TOKEN_PREFIX; @RequiredArgsConstructor @Component @@ -26,31 +26,41 @@ public class JwtHelper { public TokenDto createToken(User user) { Long userId = user.getId(); String email = user.getEmail(); + return getTokenDto(user, userId, email); + } + + public TokenDto createGuestToken(User guest){ + Long userId = guest.getId(); + String username = guest.getNickname(); + return getTokenDto(guest, userId, username); + } + + private TokenDto getTokenDto(User user, Long userId, String username) { String role = String.valueOf(user.getRole()); - String accessToken = TOKEN_PREFIX + tokenProvider.createAccessToken(role, userId, email); - String refreshToken = tokenProvider.createRefreshToken(role, userId, email); + String accessToken = TOKEN_PREFIX + tokenProvider.createAccessToken(role, userId, username); + String refreshToken = tokenProvider.createRefreshToken(role, userId, username); - refreshTokenService.saveRefreshToken(email, refreshToken); + refreshTokenService.saveRefreshToken(username, refreshToken); return new TokenDto(accessToken, refreshToken); } public TokenDto reissueToken(String refreshToken) { refreshTokenService.isExpiredRefreshToken(refreshToken); - String email = tokenProvider.getEmail(refreshToken); + String username = tokenProvider.getUsername(refreshToken); - if (!refreshTokenService.existedRefreshToken(email, refreshToken)) + if (!refreshTokenService.existedRefreshToken(username, refreshToken)) throw new CustomException(JwtExceptionCode.REFRESH_TOKEN_NOT_FOUND); Long userId = tokenProvider.getUserId(refreshToken); String role = tokenProvider.getRole(refreshToken); - String newAccessToken = TOKEN_PREFIX + tokenProvider.createAccessToken(role, userId, email); - String newRefreshToken = tokenProvider.createRefreshToken(role, userId, email); + String newAccessToken = TOKEN_PREFIX + tokenProvider.createAccessToken(role, userId, username); + String newRefreshToken = tokenProvider.createRefreshToken(role, userId, username); refreshTokenService.deleteRefreshToken(refreshToken); - refreshTokenService.saveRefreshToken(email, newRefreshToken); + refreshTokenService.saveRefreshToken(username, newRefreshToken); return new TokenDto(newAccessToken, newRefreshToken); } diff --git a/src/main/java/Gotcha/common/jwt/JwtProperties.java b/src/main/java/Gotcha/common/jwt/token/JwtProperties.java similarity index 83% rename from src/main/java/Gotcha/common/jwt/JwtProperties.java rename to src/main/java/Gotcha/common/jwt/token/JwtProperties.java index 64b0e544..53aaf88c 100644 --- a/src/main/java/Gotcha/common/jwt/JwtProperties.java +++ b/src/main/java/Gotcha/common/jwt/token/JwtProperties.java @@ -1,4 +1,4 @@ -package Gotcha.common.jwt; +package Gotcha.common.jwt.token; public interface JwtProperties { diff --git a/src/main/java/Gotcha/common/jwt/RefreshTokenService.java b/src/main/java/Gotcha/common/jwt/token/RefreshTokenService.java similarity index 75% rename from src/main/java/Gotcha/common/jwt/RefreshTokenService.java rename to src/main/java/Gotcha/common/jwt/token/RefreshTokenService.java index 2b7fb19a..80275bba 100644 --- a/src/main/java/Gotcha/common/jwt/RefreshTokenService.java +++ b/src/main/java/Gotcha/common/jwt/token/RefreshTokenService.java @@ -1,4 +1,4 @@ -package Gotcha.common.jwt; +package Gotcha.common.jwt.token; import Gotcha.common.exception.CustomException; import Gotcha.common.jwt.exception.JwtExceptionCode; @@ -19,20 +19,20 @@ public class RefreshTokenService { @Value("${token.refresh.in-redis}") private long REFRESH_EXPIRATION; - public void saveRefreshToken(String email, String refreshToken) { - String key = REFRESH_TOKEN_KEY_PREFIX + email; + public void saveRefreshToken(String username, String refreshToken) { + String key = REFRESH_TOKEN_KEY_PREFIX + username; redisUtil.setData(key, refreshToken); redisUtil.setDataExpire(key, REFRESH_EXPIRATION); } public void deleteRefreshToken(String refreshToken) { - String email = tokenProvider.getEmail(refreshToken); - String key = REFRESH_TOKEN_KEY_PREFIX + email; + String username = tokenProvider.getUsername(refreshToken); + String key = REFRESH_TOKEN_KEY_PREFIX + username; redisUtil.deleteData(key); } - public boolean existedRefreshToken(String email, String requestRefreshToken) { - String key = REFRESH_TOKEN_KEY_PREFIX + email; + public boolean existedRefreshToken(String username, String requestRefreshToken) { + String key = REFRESH_TOKEN_KEY_PREFIX + username; String storedRefreshToken = (String) redisUtil.getData(key); diff --git a/src/main/java/Gotcha/common/jwt/TokenProvider.java b/src/main/java/Gotcha/common/jwt/token/TokenProvider.java similarity index 97% rename from src/main/java/Gotcha/common/jwt/TokenProvider.java rename to src/main/java/Gotcha/common/jwt/token/TokenProvider.java index af64f8f0..d7dba9db 100644 --- a/src/main/java/Gotcha/common/jwt/TokenProvider.java +++ b/src/main/java/Gotcha/common/jwt/token/TokenProvider.java @@ -1,4 +1,4 @@ -package Gotcha.common.jwt; +package Gotcha.common.jwt.token; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; @@ -68,7 +68,7 @@ private Claims getClaims(String token) { .getPayload(); } - public String getEmail(String token) { + public String getUsername(String token) { return getClaims(token).getSubject(); } diff --git a/src/main/java/Gotcha/common/redis/RedisProperties.java b/src/main/java/Gotcha/common/redis/RedisProperties.java index ae622647..1a792521 100644 --- a/src/main/java/Gotcha/common/redis/RedisProperties.java +++ b/src/main/java/Gotcha/common/redis/RedisProperties.java @@ -7,6 +7,9 @@ public interface RedisProperties { String CODE_KEY_PREFIX = "code::"; String EMAIL_VERIFY_KEY_PREFIX = "emailVerify::"; String NICKNAME_VERIFY_KEY_PREFIX = "nicknameVerify::"; + String GUEST_KEY_PREFIX = "guest::"; long CODE_EXPIRATION_TIME = 5*60; + + long GUEST_TTL_SECONDS = 30 * 60; } \ No newline at end of file diff --git a/src/main/java/Gotcha/common/util/RedisUtil.java b/src/main/java/Gotcha/common/util/RedisUtil.java index f853bbb7..78efb085 100644 --- a/src/main/java/Gotcha/common/util/RedisUtil.java +++ b/src/main/java/Gotcha/common/util/RedisUtil.java @@ -16,7 +16,7 @@ public Object getData(String key) { return redisTemplate.opsForValue().get(key); } - public void setData(String key, String value) { + public void setData(String key, Object value) { redisTemplate.opsForValue().set(key, value); } diff --git a/src/main/java/Gotcha/domain/auth/api/AuthApi.java b/src/main/java/Gotcha/domain/auth/api/AuthApi.java index 16b2ad10..457bf802 100644 --- a/src/main/java/Gotcha/domain/auth/api/AuthApi.java +++ b/src/main/java/Gotcha/domain/auth/api/AuthApi.java @@ -17,8 +17,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; -import static Gotcha.common.jwt.JwtProperties.ACCESS_HEADER_VALUE; -import static Gotcha.common.jwt.JwtProperties.REFRESH_COOKIE_VALUE; +import static Gotcha.common.jwt.token.JwtProperties.ACCESS_HEADER_VALUE; +import static Gotcha.common.jwt.token.JwtProperties.REFRESH_COOKIE_VALUE; @Tag(name = "[인증 API]", description = "인증 관련 API") public interface AuthApi { diff --git a/src/main/java/Gotcha/domain/auth/controller/AuthController.java b/src/main/java/Gotcha/domain/auth/controller/AuthController.java index b9cc57d4..4c485b88 100644 --- a/src/main/java/Gotcha/domain/auth/controller/AuthController.java +++ b/src/main/java/Gotcha/domain/auth/controller/AuthController.java @@ -29,8 +29,8 @@ import java.util.HashMap; import java.util.Map; -import static Gotcha.common.jwt.JwtProperties.ACCESS_HEADER_VALUE; -import static Gotcha.common.jwt.JwtProperties.REFRESH_COOKIE_VALUE; +import static Gotcha.common.jwt.token.JwtProperties.ACCESS_HEADER_VALUE; +import static Gotcha.common.jwt.token.JwtProperties.REFRESH_COOKIE_VALUE; @RestController @RequiredArgsConstructor @@ -55,6 +55,13 @@ public ResponseEntity signIn(@Valid @RequestBody SignInReq signInReq) { return createTokenRes(tokenDto); } + @PostMapping("/guest/sign-in") + public ResponseEntity guestSignIn(){ + TokenDto tokenDto = authService.guestSignIn(); + + return createTokenRes(tokenDto); + } + @PostMapping("/token-reissue") public ResponseEntity reIssueToken(@CookieValue(name = REFRESH_COOKIE_VALUE, required = false) String refreshToken) { if (refreshToken == null) { diff --git a/src/main/java/Gotcha/domain/auth/service/AuthService.java b/src/main/java/Gotcha/domain/auth/service/AuthService.java index ab05ad28..66daf412 100644 --- a/src/main/java/Gotcha/domain/auth/service/AuthService.java +++ b/src/main/java/Gotcha/domain/auth/service/AuthService.java @@ -2,12 +2,14 @@ import Gotcha.common.exception.CustomException; import Gotcha.common.exception.FieldValidationException; -import Gotcha.common.jwt.JwtHelper; +import Gotcha.common.jwt.token.JwtHelper; import Gotcha.common.util.RedisUtil; import Gotcha.domain.auth.dto.SignInReq; import Gotcha.domain.auth.dto.SignUpReq; import Gotcha.domain.auth.dto.TokenDto; import Gotcha.domain.auth.exception.AuthExceptionCode; +import Gotcha.domain.auth.util.RandomNicknameGenerator; +import Gotcha.domain.user.entity.Role; import Gotcha.domain.user.entity.User; import Gotcha.domain.user.repository.UserRepository; import jakarta.servlet.http.HttpServletResponse; @@ -18,9 +20,12 @@ import java.util.HashMap; import java.util.Map; +import java.util.UUID; -import static Gotcha.common.jwt.JwtProperties.TOKEN_PREFIX; +import static Gotcha.common.jwt.token.JwtProperties.TOKEN_PREFIX; import static Gotcha.common.redis.RedisProperties.EMAIL_VERIFY_KEY_PREFIX; +import static Gotcha.common.redis.RedisProperties.GUEST_KEY_PREFIX; +import static Gotcha.common.redis.RedisProperties.GUEST_TTL_SECONDS; import static Gotcha.common.redis.RedisProperties.NICKNAME_VERIFY_KEY_PREFIX; @Service @@ -77,6 +82,30 @@ public void signOut(String HeaderAccessToken, String refreshToken, HttpServletRe jwtHelper.removeToken(accessToken, refreshToken, response); } + public TokenDto guestSignIn(){ + //무작위 아이디 값 생성 + Long guestId; + do{ + guestId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; + }while(redisUtil.existed(GUEST_KEY_PREFIX + guestId)); + //무작위 닉네임 생성 + String nickname = RandomNicknameGenerator.generateNickname(); + + //게스트 유저 생성 + User guestUser = User.builder() + .id(guestId) + .nickname(nickname) + .role(Role.GUEST) + .build(); + + //게스트 유저 정보를 Redis에 저장 + redisUtil.setData(GUEST_KEY_PREFIX + guestId, guestUser); + redisUtil.setDataExpire(GUEST_KEY_PREFIX + guestId, GUEST_TTL_SECONDS); + + //게스트 유저 토큰 생성 + return jwtHelper.createGuestToken(guestUser); + } + public TokenDto reissueAccessToken(String refreshToken) { return jwtHelper.reissueToken(refreshToken); } diff --git a/src/main/java/Gotcha/domain/auth/util/RandomNicknameGenerator.java b/src/main/java/Gotcha/domain/auth/util/RandomNicknameGenerator.java new file mode 100644 index 00000000..2796eb95 --- /dev/null +++ b/src/main/java/Gotcha/domain/auth/util/RandomNicknameGenerator.java @@ -0,0 +1,29 @@ +package Gotcha.domain.auth.util; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class RandomNicknameGenerator { + private static final List adjectives = Arrays.asList( + "귀여운", "무서운", "배고픈", "졸린", "쓸쓸한", "취한", "웃긴", "멋진", "시끄러운", "느린" + ); + + private static final List nouns = Arrays.asList( + "고양이", "강아지", "곰", "너구리", "햄스터", "호랑이", "펭귄", "낙타", "토끼", "벌새" + ); + + private static final Random random = new Random(); + + public static String generateNickname() { + String nickname; + + do { + String adj = adjectives.get(random.nextInt(adjectives.size())); + String noun = nouns.get(random.nextInt(nouns.size())); + nickname = adj + noun; + } while (nickname.length() > 6); + + return nickname; + } +} diff --git a/src/main/java/Gotcha/domain/user/entity/Role.java b/src/main/java/Gotcha/domain/user/entity/Role.java index 0d812f10..c0c1c8cf 100644 --- a/src/main/java/Gotcha/domain/user/entity/Role.java +++ b/src/main/java/Gotcha/domain/user/entity/Role.java @@ -6,7 +6,7 @@ @RequiredArgsConstructor @Getter public enum Role { - USER("ROLE_USER"), ADMIN("ROLE_ADMIN"); + USER("ROLE_USER"), ADMIN("ROLE_ADMIN"), GUEST("ROLE_GUEST"); private final String value; } diff --git a/src/main/java/Gotcha/domain/user/entity/User.java b/src/main/java/Gotcha/domain/user/entity/User.java index cbe49c7c..a9231e88 100644 --- a/src/main/java/Gotcha/domain/user/entity/User.java +++ b/src/main/java/Gotcha/domain/user/entity/User.java @@ -102,7 +102,8 @@ public class User extends BaseTimeEntity { private List bugReports = new ArrayList<>(); @Builder - public User(String email, String password, String nickname, Role role){ + public User(Long id, String email, String password, String nickname, Role role){ + this.id = id; this.email = email; this.password = password; this.nickname = nickname;