소셜 로그인 후 로그아웃이 안 되는 상황 (refreshToken 누락)

gminnimk·2024년 11월 7일
0

문제 해결

목록 보기
5/18




소셜 로그인 후 로그아웃이 안 되는 상황 (기본 유저는 문제 없음)




📜 문제 상황

  • 애플리케이션에 Google 소셜 로그인을 구현할 때 사용자에게 반복되는 오류가 발생.

  • 원활하게 로그인과 로그아웃이 가능한 일반 사용자와 달리, 구글을 통해 로그인한 사용자는 로그아웃 시 '403' 오류가 발생했고, 시스템에서는 해당 토큰을 '미등록'으로 식별.

  • 또한 디버깅을 통해 일반 사용자 로그인 세션에서는 새로 고침 토큰을 성공적으로 생성하고 저장했지만 Google 로그인 세션에서는 그렇지 않은 것으로 나타남.





📄 서버 콘솔 오류

2024-11-06T17:01:49.152+09:00 WARN 25052 --- [ecogrow-backend][nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.sw.ecogrowbackend.common.exception.CustomException: 등록되지 않은 토큰입니다.]


📄 users 테이블

  • 1번 구글 로그인
  • 2번 일반 유저 로그인


📄 1번 refresh_token 값


📄 2번 refresh_token 값


📄 구글 로그인 후 디버그 모드




📜 문제 원인

  • 'GoogleService' 클래스에 Google 로그인 사용자를 위한 새로 고침 토큰 생성 및 저장 단계가 없기 때문에 발생.

  • 서비스가 Google 사용자를 위한 액세스 토큰을 성공적으로 생성했지만 DB에 해당 새로 고침 토큰 생성 및 저장을 건너뜀.

  • Google 로그인 사용자가 토큰에 따른 작업(예: 로그아웃)을 수행하려고 하면 시스템에서 유효한 새로 고침(refresh) 토큰을 찾을 수 없어 인증 문제와 오류가 발생.




📜 문제 해결

  • 'GoogleService'가 액세스 토큰과 함께 새로고침 토큰을 생성하도록 수정. 새로 고침 토큰은 일반 사용자 세션의 동작과 일치하도록 DB에 저장.

  • 코드 업데이트: GoogleService에서 Google 사용자를 검색 또는 등록하고 액세스 토큰을 생성한 후 jwtUtil.createRefreshToken(~)을 사용하여 새로 고침 토큰을 생성하고 refreshTokenService를 통해 저장.


📄 구글 로그인 후 로그아웃 성공


📄 refresh_token db 값 확인

0개의 댓글