파이어베이스 인증 기능을 통해 회원가입을 구현하려고 하는데
처음에 먼저 이메일과 비밀번호를 받고 다음 화면에서 이름과 전화번호를 받도록 화면을 구성했다.
이메일과 비밀번호를 입력하고 다음 버튼을 누르면 그 즉시 파이어베이스 인증에 이메일(비밀번호) 계정이 입력한 내용으로 등록이되며,
만약 입력한 이메일이 이미 등록된 계정이라면 인증 등록 과정에서 에러메시지로 확인이 가능하기 때문에 중복 확인 처리가 가능하다.
하지만 문제는 전화번호인데
전화번호 인증 과정은 입력한 전화번호가 이미 파이어베이스 인증에 등록된 전화번호라 하더라도 인증과정은 그대로 진행이 되며, 인증 후 signInWithCredential로 전화번호 계정으로 로그인이 문제없이 가능했다.
따라서 파이어베이스 인증에 등록된 전화번호로 새로 가입을 시도하려는 경우에 중복확인이 어렵다는 문제가 있는데...
이 경우 signin을 한 후에 additionalUserInfo.isNewUser
프로퍼티를 통해 해당 계정이 새로운 유저인지 아닌지를 확인할 수 있었다.
이를 사용하여 전화번호 인증 절차 후 signin을 한 후에 전화번호 계정이 중복인지를 확인하는 절차를 수행할 수 있었지만
또 새로운 문제가 있었다.
모든 회원가입 절차가 끝난 뒤에 결국 파이어베이스 인증 정보에는 이메일 계정과 전화번호 계정이 별도로 등록되어버리기 때문에 이를 하나의 계정으로 묶을 필요가 있었다.
이때 linkWithCredential
을 사용해 이메일 계정에 전화번호 계정을 묶을 수 있게 처리가 가능했는데,
앞서 전화번호 인증을 진행한 후 전달받은 credential로 signin을 하게되면 추후에 linkWithCredential
에 credential을 전달할 시점에는 이미 연결된 계정? 이라는 에러가 뜨며 계정을 묶을 수 없게 되어버린다.
linkWithCredential : com.google.firebase.auth.FirebaseAuthUserCollisionException: This credential is already associated with a different user account.
따라서 이를 해결하기 위해서는 전화번호 인증 후 얻은 credential을 signin하는데에 쓰지 말아야 하지만... 그렇게 되면 signin을 하고 중복확인을 하는 과정을 못하게 되어버린다.
지금 이 부분에서 막혀서 어찌할 줄 모르는 상태이다.
계속 고민중이다.