TIL

CH3 일정 관리 앱 Develop 과제 TIL

phonebee 2025. 2. 12. 17:24

▶ 트러블 슈팅

▷ 로그인 시 오류 발생

● 전개

: 회원 가입 후 로그인 과정에서 401에러가 나타나며 로그인이 안되는 에러가 나타났다.

 

● 과정

: 401에러는 요청한 데이터와 DB 내의 데이터가 일치하지 않아 일어나는 에러이므로 우선적으로 디버깅을 통해 유저가 입력한 데이터와 DB의 데이터를 출력할 수 있도록 하여 비교 분석하였다.

 

● 원인

문제가 나타난 이유

x-www-form-urlencoded에서 작성 시에 " "도 데이터에 저장된다 즉, " lh991117@gmail.com"이 저장되고 있어 login시 작성한 "lh991117@gmail.com"과 틀리기 때문에 401에러가 나타난 것이다.

 

● 해결

: " "을 지우고 회원가입 후 로그인을 시도하니 문제 없이 실행된다.

 

▷ 비밀번호 암호화 시 나타난 에러

● 전개

: 비밀번호 암호화 기능을 추가한 후 로그인을 시도하니 401에러가 나타났다.

 

● 과정

: 우선적으로 디버깅을 위해 입력한 비밀번호와 DB에 저장된 비밀번호를 출력하는 코드를 작성하고, 이외에도 비밀번호 해싱이 제대로 이루어 졌는지 해싱 기능 뒤에 "Success"를 출력하는 코드를 넣어서 확인해봤다.

 

● 원인

: 401에러가 나타난 원인 이메일과 패스워드를 둘 다 비교하여 틀릴 경우 401에러가 출력되도록 제작한 코드에서 문제가 나타났다. 

문제가 나타난 부분

위의 코드를 실행시키면 유저가 입력한 비밀번호와 DB 내에 암호화되어 저장되어 있는 비밀번호를 직접 비교하기 때문에 일치하지 않다는 에러인 401에러가 나타나게 되는 것이다.

 

● 해결

: 이를 해결하기 위해서 먼저 email만 비교하는 findUserByEmail코드를 작성하고 그 후 비밀번호를 비교할 수 있도록 코드를 수정했다.

//이메일을 통해서 유저 로그인
public LoginResponseDto login(LoginRequestDto requestDto, HttpSession session, HttpServletResponse response) {
    //입력 받은 이메일이 잘못된 경우 401에러 출력
    User user=userRepository.findUserByEmail(requestDto.getEmail())
                    .orElseThrow(()->new ResponseStatusException(HttpStatus.UNAUTHORIZED,"Wrong email"));

    //입력한 비밀번호와 DB에 저장된 암호화된 비밀번호 비교
    if(!passwordEncoder.matches(requestDto.getPassword(), user.getPassword())){
        System.out.println("error");
        throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Wrong password");
    }

    //세션에 사용자 ID 저장
    session.setAttribute("user", user.getId());

    //세션 ID를 쿠키로 설정
    Cookie cookie = new Cookie("JSESSIONID", session.getId());
    cookie.setHttpOnly(true);
    cookie.setPath("/");
    response.addCookie(cookie);

    return new LoginResponseDto(user.getId());
}

 

이후 실행을 시켰더니 제대로 실행되었다.

'TIL' 카테고리의 다른 글

내일배움캠프 TIL 23.  (0) 2025.02.21
뉴스피드 프로젝트 트러블 슈팅 TIL  (0) 2025.02.20
내일배움캠프 TIL 22.  (1) 2025.02.05
CH3 일정 관리 과제 TIL  (0) 2025.02.03
내일배움캠프 TIL 21.  (1) 2025.01.23