TIL - 23.02.10

0

TIL

목록 보기
67/126

우리 팀은 본격적으로 프로젝트 진행을 위해 기초 구성을 마무리하기로했다.
각각의 기능들을 테스트해보기 위한 대략적인 프론트 구성을 2명,
백엔드에서 기초가 되고 어려운 시큐리티와 회원가입, 로그인, 로그아웃 기능 구성을 2명,
마지막으로 우리 프로젝트에서 사용될 데이터를 크롤링하는 방법을 1명이 담당하기로 나누어서 해결해오기로했다.
나는 일단 백엔드쪽을 담당하였는데, 어제 S.A. 정리를 하느라 시큐리티쪽은 거의 참여하지는 못했고 로그인 기능을 구현해보기로했다.

일단 가장 기본적으로 클라이언트로부터 Request로 받아온 유저의 email, password를 풀고
받아온 email을 레퍼지토리에서 findByEmail을 이용해 회원가입이 되어있는 유저인지 확인후 예외처리를 한다.
그리고 받아온 password를 passwordEncoder.matches를 이용해 비밀번호 일치 여부를 확인하고 마찬가지로 예외처리를 한다.
그러고나서 마지막으로 jwtUtil.createToken으로 받아온 유저의 이메일과 룰(유저인지 관리자인지) 확인하여 토큰을 생성하고 헤더에 추가하여 반환한다.

// 로그인 유저,관리자
@Transactional
@Override
public void loginUser(UserLoginRequest userLoginRequest, HttpServletResponse response) {
    String email = userLoginRequest.getEmail();
    String password = userLoginRequest.getPassword();

    User user = userRepository.findByEmail(email).orElseThrow(
            () -> new IllegalArgumentException("해당 email의 유저가 존재하지 않습니다.")
    );

    if (!passwordEncoder.matches(password, user.getPassword())) {
        throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
    }

    response.addHeader(JwtUtil.AUTHORIZATION_HEADER, jwtUtil.createToken(user.getEmail(), user.getRole()));
}

지난번 프로젝트를 많이 참고하여 작성해보았는데 중간에 생각난것이
프로젝트 기능 중에 유저의 계정을 비활성화(회원탈퇴) 하는 기능이 있었는데 그것을 생각해보니 비활성화된 유저가 로그인을 시도하면 로그인이 불가능하도록 만들어야한다는 것을 깨달았고 이것은 스스로 만들어보기로했다.

// 로그인 유저,관리자
@Transactional
@Override
public void loginUser(UserLoginRequest userLoginRequest, HttpServletResponse response) {
    ...
    // 받아온 이메일에 해당하는 유저가 ACTIVE 상태인지 확인 필요
    if (user.getActivation().equals(ActivationEnum.INACTIVE)) {
        throw new IllegalArgumentException("해당 유저는 탈퇴한 회원입니다.");
    }
    ...
    response.addHeader(JwtUtil.AUTHORIZATION_HEADER, jwtUtil.createToken(user.getEmail(), user.getRole()));
}

회원가입시 생성되고 기본값으로 주어지는 ActivationEnum.ACTIVE를 활용하기 위해 위에서 확인된 user객체를 사용하여 그 객체가 가지고있는 ActivationEnum 값이 INACTIVE하다면 해당 유저는 탈퇴한 회원이라는 예외처리를 반환하도록 구현해보았다.

일단은 코드를 작성해놓고 이게 될까..? 싶었는데
왠지는 모르겠지만 실행해놓고 H2-console을 이용해 INACTIVE 유저를 만들어서 확인해보니 제대로 예외처리 하는 것을 확인했다.
내가 이걸 어떻게 만든거지...? 싶으면서도 너무 뿌듯했다.

0개의 댓글