2.스프링 시큐리티 [OAuth 중복 이메일 처리]

dasd412·2022년 1월 31일
0

포트폴리오

목록 보기
19/41

어떤 사용자가 OAuth 로그인을 n개 하는데, email이 전부 같다고 하자.

만약 email만 체크한다면, 중복으로 처리된다. 이를 막기 위해 다음과 같이 작성했다.

//OAuth 회원 가입 시에는 provider 와 email 둘 다를 알 필요가 있다.
    // 반면, 일반 회원 가입 시에는 email 만 알 필요가 있다. provider 는 null 이다.
    @Override
    public Boolean existsEmail(String email, String provider) {
        Integer fetchFirst;
        if (provider == null) {
            fetchFirst = jpaQueryFactory
                    .selectOne()
                    .from(QWriter.writer)
                    .where(QWriter.writer.email.eq(email))
                    .fetchFirst();
        } else {
            //이메일이 같더라도 provider 가 다르면 다른 걸로 인식하게 하기
            fetchFirst = jpaQueryFactory
                    .selectOne()
                    .from(QWriter.writer)
                    .where(QWriter.writer.email.eq(email).and(QWriter.writer.provider.eq(provider)))
                    .fetchFirst();
        }
        return fetchFirst != null;
    }

일반 회원 가입 시에는 provider가 존재하지 않기 때문에 null이다. 따라서 같은 email이 있는지만 체크하면 된다.

반면 oauth 회원 가입 시에는 provider 랑 email 모두 같은 지 확인한다.

이렇게 하면 email이 같아도 oauth provider 가 다르면 전부 다르게 회원 가입 된다.

하지만 일반 회원 가입은 다르다. 만약 oauth 회원 가입으로 된 특정 email이 있다면, email만 보고 판단하기 때문에 중복 이메일로 판정된다. 해당 결과는 프론트 단에서 alert()로 중복이메일임을 알려주었다.

profile
아키텍쳐 설계와 테스트 코드에 관심이 많음.

0개의 댓글