구현을 계속 하다보니 이런 경우도 있지 않을까 싶었다

구글 로그인을 통해 회원가입을 했는데, 구글 이메일을 가지고 자체 회원가입을 하는 경우.....!

 

....대대적인 수정에 들어갔다

우선 AuthRepository에 findByEmailAndProvider을 구현하여, email과 provider을 통해 유저의 정보를 찾을 수 있게끔했다

 

1. 자체 회원가입을 할 때 DB의 provider컬럼에 local이 추가되도록 하였다 (구글 로그인은 이미 추가됨)

2. JWT에 넣어져 있는 유저의 이메일을 가지고 유저를 구분하려 했으나, 이제는 provider와 함께 구분해야하기에 claim에 provider를 추가하였다

자체 로그인의 JWT 토큰 생성
구글 로그인의 JWT 토큰 생성

 

3. accessToken을 재발급하는 /refresh에도 유저의 refresh 토큰에 있는 provider 값을 알아내어서 accessToken을 재발급하도록 수정하였다

 

4. findByEmail이 쓰였던 부분은 대부분 findByEmailAndProvider로 변경하였다

 

5. Redis에는 key, value로만 값이 구성되어있기에 자체로그인의 key에는 사용자의 id값을(이메일 아님, idx값), 구글 로그인에는 이메일 값을 key로 설정하여 같은 이메일이 들어와도 구분될 수 있도록 변경하였다

 

 

그 결과로 인해 같은 email인데도 다른 유저라고 인식할 수 있게 되었다

복사했습니다!