-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
소셜 로그인 버그 FIX #169
소셜 로그인 버그 FIX #169
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오늘 있엇던 이슈(#167)를 해결하는 코드도 있는 것 같군요!
전반적으로 메시지 상수화로 깔끔하게 해주시고 메서드 분리도 잘 해주셔서 잘 읽힌 것 같습니다!
어려운 기능 구현해주시느라 너무너무너무 수고 많으셨습니다....
private OAuth2UserImpl extractOAuth2User(Authentication authentication) { | ||
if (!(authentication.getPrincipal() instanceof OAuth2UserImpl oauth2User)) { | ||
throw new InternalAuthenticationServiceException(OAUTH_USER_TYPE_IS_INVALID); | ||
} | ||
return oauth2User; | ||
} | ||
|
||
private SocialLoginResponse createSocialLoginResponse(User user, AuthProvider authProvider) { | ||
LoginResponse loginResponse = authService.createTokens(user); | ||
return SocialLoginResponse.of(loginResponse, authProvider); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
메서드 분리 깔끔하게 해주셔서 감사합니다!!🥰
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
util로 뺀거 깔금하네유!
📝 Jacoco Test Coverage
|
🎫 관련 이슈
Resolves #157
📌 기존 로그인 방식
1️⃣ 클라이언트(프론트엔드)에서
깃허브로 로그인하기
버튼을 누르면, 백엔드 서버 uriGET /api/v1/oauth2/authorization/github
로 요청!2️⃣ 백엔드 서버는 깃허브 로그인 페이지로 넘어갈 수 있는 리다이렉트 uri를 클라이언트에 응답! (oauth2-client 프레임워크가 지원해줌😎)
3️⃣ 클라이언트가 깃허브 로그인 성공!
4️⃣ 깃허브 서버가 지정된 리다이렉트 uri(백엔드 서버
/api/v1/login/oauth2/code/github?code={code}&state={state}
)로 code를 넘겨줌!5️⃣ 백엔드 서버가 code를 받아 처리한 뒤 로그인 응답을 내려줌! (oauth2-client 프레임워크가 지원해줌😎)
🚨 문제 상황
💬 해결책 2번 방식을 사용하면 code를 받아서 깃허브 서버에 access token을 요청하고, 기타 처리를 해주는 유용한 oauth2-client의 장점을 사용할 수 없어😥
💬 그럼 해결책 1은? 리다이렉트 응답을 보내면 body를 넣을 수 없어! 하지만 우린.. 로그인 성공 시 json 응답(토큰+유저 정보)를 내려줘야해!! body 대신 uri에 파라미터 형식으로 넣을수도 있고, 쿠키에 json을 넣을수도 있지만 보안상으로나 json 파싱이나 너무 복잡해..
💡 해결된 방식
사실 해결책 2번으로 해결이 되었다..😆 클라이언트가 깃허브 로그인 성공 시 코드를 받고, 백엔드 서버에 요청을 하는데, 기존 oauth2client에서 제공해주는 엔드포인트(
/login/oauth2/code/github?code={code}&state={state}
)를 그대로 쓸 수 있더라ㅎ대신
application.yml
에 redirectUri를 클라이언트 uri로 추가해 주어야함!✅ 구현 내용
AuthExceptionHandlerFilter
)OAuth2LoginFailureHandler
)💬 코멘트