구글 로그인이 정말 몇일째 작동하지 않습니다 ㅠㅠ...
미해결
@Service public class CustomOAuth2LoginSuccessHandler implements AuthenticationSuccessHandler { private static final Logger logger = LoggerFactory.getLogger(AuthController.class); @Autowired private CustomOAuth2UserService customOAuth2UserService; @Autowired private OAuth2AuthorizedClientService authorizedClientService; @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { logger.info("Authentication Success - Principal: {}", authentication.getPrincipal()); OAuth2AuthenticationToken authToken = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = authToken.getPrincipal(); OAuth2AuthorizedClient authorizedClient = authorizedClientService .loadAuthorizedClient(authToken.getAuthorizedClientRegistrationId(), authToken.getName()); if (authorizedClient != null) { OAuth2UserRequest userRequest = new OAuth2UserRequest(authorizedClient.getClientRegistration(), authorizedClient.getAccessToken()); customOAuth2UserService.processOAuth2User(oAuth2User, userRequest); } // 인증 후 리디렉션 또는 추가 로직 구현 response.sendRedirect("/home"); // 예시로 '/home'으로 리디렉션 } } @Service public class CustomOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> { private static final Logger logger = LoggerFactory.getLogger(CustomOAuth2UserService.class); @Autowired private MembersRepository membersRepository; @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { logger.info("loadUser1"); try { OAuth2UserService<OAuth2UserRequest, OAuth2User> delegate = new DefaultOAuth2UserService(); OAuth2User oAuth2User = delegate.loadUser(userRequest); logOAuth2UserInfo(oAuth2User); // 로그 출력 processOAuth2User(oAuth2User, userRequest); return oAuth2User; } catch (Exception e) { logger.error("Error loading OAuth2User", e); throw e; } } private void logOAuth2UserInfo(OAuth2User oAuth2User) { logger.info("OAuth2User Attributes: {}", oAuth2User.getAttributes()); if (oAuth2User.getAttribute("email") == null) { logger.warn("OAuth2User does not contain email attribute"); } } @Transactional public void processOAuth2User(OAuth2User oAuth2User, OAuth2UserRequest userRequest) { String email = oAuth2User.getAttribute("email"); String name = oAuth2User.getAttribute("name"); logger.info("Processing user - Email: {}, Name: {}", email, name); Optional<MembersEntity> existingMember = membersRepository.findByEmail(email); MembersEntity member; if (existingMember.isPresent()) { member = existingMember.get(); member.updateFromGoogle(name, email); logger.info("Updated existing user: {}", email); } else { member = MembersEntity.builder() .email(email) .name(name) .nickname(name + "_google") .role(Role.ROLE_CUSTOMER) .build(); logger.info("Saving new user: {}", email); } try { membersRepository.save(member); logger.info("User saved/updated successfully: {}", email); } catch (Exception e) { logger.error("Error saving/updating user: {}", email, e); } membersRepository.save(member); } } @RestController public class LoginController { private static final Logger logger = LoggerFactory.getLogger(AuthController.class); @GetMapping("/login/oauth2") public void redirectToLoginPage(HttpServletResponse response) throws IOException { // OAuth2 로그인 페이지로 리디렉션 logger.info("리다이렉트"); response.sendRedirect("/oauth2/authorization/google"); } }
- oauth2.0
- 구글로그인
- 로그인





