Skip to content

Commit

Permalink
fix: Member 회원가입 에러 해결
Browse files Browse the repository at this point in the history
member 회원가입할 때 개인이 모든 장소 입력하는 경우에는 바로 권한을 승인했지만, 403이 떠야 하므로 장소를 입력하지 않았을 때만 GUEST권한으로 회원가입되도록 변경하였다.
  • Loading branch information
yooooonshine committed Aug 10, 2024
1 parent 7c2c95c commit 2e20c95
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -44,17 +46,21 @@ 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);

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
Expand Down

0 comments on commit 2e20c95

Please sign in to comment.