diff --git a/backend/src/main/java/middle_point_search/backend/common/security/jwt/filter/JwtAuthenticationFilter.java b/backend/src/main/java/middle_point_search/backend/common/security/jwt/filter/JwtAuthenticationFilter.java index bb56feb..91ea3c1 100644 --- a/backend/src/main/java/middle_point_search/backend/common/security/jwt/filter/JwtAuthenticationFilter.java +++ b/backend/src/main/java/middle_point_search/backend/common/security/jwt/filter/JwtAuthenticationFilter.java @@ -63,11 +63,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse //4. refresh토큰이 존재하며, refreshToken이 유효하지 않으면 로그인 유도 //5. 그 외 모든 경우는 에러 리턴 if (accessToken != null && jwtTokenProvider.isTokenValid(accessToken)) { - final String nowRoomId = jwtTokenProvider.extractRoomId(request).orElse(null); - final RoomType nowRoomType = jwtTokenProvider.extractRoomType(request).orElse(null); - final Room room = roomRepository.findByIdentityNumber(tokenRoomId) - .orElseThrow(() -> new CustomException(ROOM_NOT_FOUND)); //토큰이 logout된 토큰인지 검사 if (jwtTokenProvider.isLogout(accessToken)) { @@ -76,12 +72,16 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } //토큰이 다른 room의 토큰인지 검사 + final String nowRoomId = jwtTokenProvider.extractRoomId(request).orElse(null); if (!Objects.equals(nowRoomId, tokenRoomId)) { log.info("다른 방의 accessToken으로 인증 실패"); throw new CustomException(UNAUTHORIZED); } - //토큰의 있는 방의 Type과 헤더릐 RoomType이 같은지 검사 + //토큰의 있는 방의 Type과 헤더와 RoomType이 같은지 검사 + final RoomType nowRoomType = jwtTokenProvider.extractRoomType(request).orElse(null); + final Room room = roomRepository.findByIdentityNumber(tokenRoomId) + .orElseThrow(() -> new CustomException(ROOM_NOT_FOUND)); if (nowRoomType != room.getRoomType()) { throw new CustomException(ROOM_TYPE_UNPROCESSABLE); } diff --git a/backend/src/main/java/middle_point_search/backend/domains/member/service/MemberService.java b/backend/src/main/java/middle_point_search/backend/domains/member/service/MemberService.java index c60ba06..3fd09e9 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/member/service/MemberService.java +++ b/backend/src/main/java/middle_point_search/backend/domains/member/service/MemberService.java @@ -19,6 +19,7 @@ import middle_point_search.backend.domains.member.domain.Member; import middle_point_search.backend.domains.member.domain.Role; import middle_point_search.backend.domains.member.repository.MemberRepository; +import middle_point_search.backend.domains.place.repository.PlaceRepository; import middle_point_search.backend.domains.room.domain.Room; import middle_point_search.backend.domains.room.domain.RoomType; import middle_point_search.backend.domains.room.repository.RoomRepository; @@ -31,6 +32,7 @@ public class MemberService { private final RoomRepository roomRepository; private final MemberRepository memberRepository; + private final PlaceRepository placeRepository; private final PasswordEncoder passwordEncoder; private final RefreshTokenRepository refreshTokenRepository; private final LogoutRepository logoutRepository; @@ -44,7 +46,7 @@ public Member createMember(String roomId, String name, String pw) throws RoomNot .orElseThrow(() -> new RoomNotFoundException("해당하는 방이 존재하지 않습니다")); //회원 권한 정하기 - Role role = decideRole(room.getRoomType()); + Role role = decideRole(room); Member member = Member.from(room, name, pw, role); memberRepository.save(member); @@ -52,9 +54,13 @@ public Member createMember(String roomId, String name, String pw) throws RoomNot return member; } - // 회원의 ROLE을 Room의 RoomType을 기준으로 결정하는 메서드 - private Role decideRole(RoomType roomType) { - if (roomType == RoomType.SELF) { + // 회원의 ROLE을 Room의 RoomType과 장소 저장 유무를 기준으로 결정하는 메서드 + private Role decideRole(Room room) { + RoomType roomType = room.getRoomType(); + String identityNumber = room.getIdentityNumber(); + + //방 타입이 개인이 모두 저장이고, 이미 장소를 저장했다면 그 이후에 회원가입하는 모든 회원은 권한승인 + if (roomType == RoomType.SELF && placeRepository.existsByRoom_IdentityNumber(identityNumber)) { return Role.USER; // SELF인 경우 이미 다 장소가 입력됐으므로 바로 승인 } return Role.GUEST; // 회원 가입시 권한은 GUEST