KakaoController

sudals·2024년 10월 11일

Pawfit - KakaoLogin

목록 보기
3/5

클래스 선언 및 의존성 주입


@RestController

  • 이 클래스가 RESTful 웹 서비스의 컨트롤러 역할을 한다는 것을 선언

@RequiredArgsConstructor

  • final로 선언된 필드에 대해 생성자를 자동으로 생성해 주입

@GetMapping("/oauth/kakao/callback")

  • /oauth/kakao/callback 경로로 GET 요청을 받을 때 이 메서드가 실행

@RequestParam String code

  • 카카오에서 받은 인증 코드를 파라미터로 받음

ResponseEntity<Map<String, String>>

  • 응답 데이터를 HTTP 상태와 함께 반환하는 객체
  • Map을 사용하여 응답 데이터를 key-value 형식으로 전달

kakaoService.getAccessTokenFromKakao(code)

  • 카카오 인증 코드를 이용해 엑세스 토큰을 발급받는 메서드

response.put("access_token", accessToken)

  • 엑세스 토큰을 응답 데이터에 저장

카카오 API를 통해 유저 정보 가져오기

kakaoService.getUserInfoFromKakao(accessToken)

  • 발급받은 엑세스 토큰을 사용해 카카오 API에서 유저 정보를 가져오기

userInfo.getKakaoAccount().getEmail()

  • 응답 데이터에서 유저의 이메일 정보를 추출

response.put("email", email)

  • 이메일을 응답 데이터에 추가

프로필 정보 확인 및 닉네임 저장

if (userInfo.getKakaoAccount().getProfile() != null) {

  • 프로필이 있는지 체크
  • 닉네임이 있다면 nickname 변수에 저장하고, response 객체에 "nickname"으로 저장
  • 프로필 정보가 없을 경우, 경고 메시지를 로그에 남기고 "프로필 정보 없음"이라는 값을 response에 저장

데이터베이스에서 이메일 조회

userAuthMapper.findByEmail(email)

  • 데이터베이스에서 이메일을 가진 유저 정보를 조회

유저 정보 확인 및 이메일 비교

if (userAuth != null)

  • 디비에 유저 정보 유무 확인

logger.info("DB에서 조회된 이메일: {}", userAuth.getEmail());

  • 디비에서 조회된 이메일 정보를 로그로 남김

userAuth.getEmail() == null || userAuth.getEmail().isEmpty()

  • 이메일 정보가 없거나 필드가 없으면 경고 로그 기록, 에러 응답메세지 출력

ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response)

  • 400 BAD REQUEST 상태 코드와 함께 response를 반환

이메일이 일치 할 경우

  • 데이터베이스에서 조회된 이메일(userAuth.getEmail())과 카카오에서 받아온 이메일(email)이 일치하는지 확인
  • trim() 메서드를 사용해 양쪽 이메일의 앞뒤 공백을 제거한 후 비교
  • 이메일이 일치하는 경우, 로그에 "이메일이 일치함: {} 메시지를 기록
  • 이후 return ResponseEntity.ok(response);를 사용해 200 OK 상태 코드와 함께 response를 반환
  • response에는 엑세스 토큰, 이메일, 닉네임이 포함되어 있으므로, 클라이언트는 이 정보를 이용해 로그인 완료 후의 처리를 할 수 있음

이메일이 일치하지 않는 경우

logger.warn("이메일이 일치하지 않음.")

  • 이메일이 일치하지 않음을 경고 로그로 기록

response.put("error", "해당 계정과 연동된 유저 정보가 없습니다")

  • 에러 메시지를 추가

return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response);

  • 400 BAD REQUEST 상태 코드와 함께 응답을 반환

디비에 해당 이메일이 없는 경우

if (userAuth != null)

  • 디비에 해당 이메일을 찾을 수 없을 때

logger.warn("DB에서 해당 이메일을 찾을 수 없음: {}", email)

  • 해당 이메일이 데이터베이스에 없다는 경고 로그를 기록

response.put("error", "해당 계정과 연동된 유저 정보가 없습니다")

  • 에러 메시지를 추가

return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response)

  • 400 BAD REQUEST 상태 코드와 함께 response를 반환

유저 정보 가져오기 실패

catch (Exception e)

  • Exception 타입의 예외를 모두 처리

logger.error(...)

  • logger.error는 오류가 발생했음을 로그에 기록

response.clear()

  • 예외 발생 시 기존의 응답 데이터를 초기화

response.put("error", ...)

  • 오류 메시지를 response에 저장

return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response)

  • HTTP 500 상태 코드와 함께 오류 메시지를 반환

엑세스 토큰 발급 오류 처리


catch (Exception e)

  • 엑세스 토큰 발급 중 발생한 모든 예외를 처리

... 위와 동일

profile
봉천동 불개미

0개의 댓글