소셜로그인 문제

두주·2024년 1월 28일
0

TIL

목록 보기
42/58
val tokenUserId = userPrincipal.id

val tokenUserPlatform = userPrincipal.platform

when (tokenUserPlatform) {
    Platform.SPARTA -> {
        val checkUserId = userRepository.findByIdOrNull(tokenUserId)
            ?: throw ModelNotFoundException("UserId", tokenUserId)

        return checkUserId.toResponse()
    }

    Platform.GOOGLE -> {
        val checkUserId = socialRepository.findByIdOrNull(tokenUserId)
            ?: throw ModelNotFoundException("UserId", tokenUserId)

        return checkUserId.toResponse()
    }

    else -> throw IllegalStateException("플랫폼 정보가 확인되지 않았습니다.")
}

소셜로그인과, 사이트 회원가입을 통해 저장되는 데이터가 달라,
각자의 테이블에 데이터를 보관했다.

처음에는 userId를 가지고, requestParam으로 플랫폼을 받아야 해당 플랫폼의 userId를 조회했다.

이 방식이 너무 비효율 적이라고 생각했고, userId를 입력했을 때 알아서 테이블을 찾아 조회하는 것이 맞지 않나? 라는 생각이 들었다.

그래서 위 코드와 같이, Jwt에 담긴 Platfrom을 기준으로 조회를 진행할 수 있게끔 설정을 했다.

진행 중 문득 Google의 Zanzibar 라는 시스템이 떠올랐다.

복잡한 권한을 파일명@권한#UserId 등으로 맵핑하여 보관한다는 개념이었는데
여기서 써먹을 수 있지 않을까? 라는 생각이 들었다.

integratedUser 이라는 테이블을 생성하여, 사이트 회원 가입된 유저 정보와,
소셜 로그인 유저 정보를 가져와서 하나의 테이블에서 관리할 수 있지 않을까?

라는 아이디어였다.

DB를 생성하고, 연관 관계를 설정해 봤는데 하나의 컬럼에 두 테이블의 컬럼을 fk로 설정할 수가 없었다.

소셜로그인용 컬럼과, 회원가입용 컬럼을 만들기에는 이게 무슨 비효율적인 일인가 라는 생각이 들어서 결국 포기해버렸다.

다른 방법이 분명히 있겠지만 지금 해결해야될 문제가 더 많아, 시간을 쏟기보다는
추후 조금 더 공부해서 내 방법을 구현하겠다.

profile
야옹.

0개의 댓글