Skip to content

Commit ca672c3

Browse files
committed
Handle duplicate Google social users
1 parent a495291 commit ca672c3

2 files changed

Lines changed: 13 additions & 6 deletions

File tree

ontime-back/src/main/java/devkor/ontime_back/global/oauth/google/GoogleLoginFilter.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
1919

2020
import java.io.IOException;
21+
import java.util.List;
2122
import java.util.Map;
22-
import java.util.Optional;
2323
import java.util.concurrent.ConcurrentHashMap;
2424

2525
@Slf4j
@@ -48,10 +48,14 @@ public Authentication attemptAuthentication(HttpServletRequest request, HttpServ
4848

4949
Object loginLock = LOGIN_LOCKS.computeIfAbsent(googleUserId, key -> new Object());
5050
synchronized (loginLock) {
51-
Optional<User> existingUser = userRepository.findBySocialTypeAndSocialId(SocialType.GOOGLE, googleUserId);
52-
53-
if (existingUser.isPresent()) {
54-
return googleLoginService.handleLogin(oAuthGoogleRequestDto, existingUser.get(), response);
51+
List<User> existingUsers = userRepository.findAllBySocialTypeAndSocialIdOrderByIdDesc(SocialType.GOOGLE, googleUserId);
52+
53+
if (!existingUsers.isEmpty()) {
54+
if (existingUsers.size() > 1) {
55+
log.warn("동일한 Google socialId를 가진 유저가 {}명 존재합니다. 최신 userId={} 계정으로 로그인합니다.",
56+
existingUsers.size(), existingUsers.get(0).getId());
57+
}
58+
return googleLoginService.handleLogin(oAuthGoogleRequestDto, existingUsers.get(0), response);
5559
} else {
5660
OAuthGoogleUserDto oAuthGoogleUserDto = new OAuthGoogleUserDto(googleUserId, (String) googlePayload.get("name"), (String) googlePayload.get("picture"), googlePayload.getEmail());
5761
return googleLoginService.handleRegister(oAuthGoogleRequestDto, oAuthGoogleUserDto, response);

ontime-back/src/main/java/devkor/ontime_back/repository/UserRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.data.jpa.repository.Query;
77
import org.springframework.stereotype.Repository;
88

9+
import java.util.List;
910
import java.util.Optional;
1011

1112
@Repository
@@ -21,8 +22,10 @@ public interface UserRepository extends JpaRepository<User, Long> {
2122
// 추가정보 입력받을때 사용
2223
Optional<User> findBySocialTypeAndSocialId(SocialType socialType, String socialId);
2324

25+
List<User> findAllBySocialTypeAndSocialIdOrderByIdDesc(SocialType socialType, String socialId);
26+
2427
@Query("SELECT u.spareTime FROM User u WHERE u.id = :id")
2528
Integer findSpareTimeById(Long id);
2629

2730
Optional<Object> findByAccessToken(String token);
28-
}
31+
}

0 commit comments

Comments
 (0)