kookmin-sw / capstone-2024-45

시간은행 v2
https://kookmin-sw.github.io/capstone-2024-45/
1 stars 1 forks source link

[Front] 카카오 로그인과 구글 로그인 파이어베이스 연결 #38

Closed Heo-jieun closed 2 months ago

Heo-jieun commented 2 months ago

사용자가 여러 인증 제공업체를 통해 앱에 로그인할 수 있기 때문에 사용자가 로그인할 때 어떤 인증 제공업체를 사용하든 동일한 Firebase 사용자 ID로 본인 확인을 해야한다. 현재 카카오 로그인과 구글 로그인 각각 파이어베이스에 연동이 되어있지만 인증 제공 업체가 달라 한 사용자라고 인식하지 못하고 있다. 그러므로 해당 문제를 해결하기 위해 파이어베이스로 여러 인증업체 연결해야한다.

FirebaseAuth.singInWithCustomToken()으로 커스텀 인증 시스템을 연동 할 수 있는데 signInWithCustomToken은 JWT 형식의 토큰을 받기 때문에 카카오 API의 토큰을 통하여 변환하여 사용해야한다.

순서

  1. 카카오 토큰 받기
  2. 토큰을 사용하여 카카오 유저 아이디 얻기
  3. Firebase Admin SDK에서 유저 아이디를 통하여 firebase 토큰 생성
  4. signInWithCustomToken으로 유저 등록

위의 프로세스 중 firebase 토큰 생성하는 부분은 서버에서 직접 해야한다. https://github.com/FirebaseExtended/custom-auth-samples 이곳에 예제가 나와있다.

Heo-jieun commented 2 months ago

GPT 질문 : 근데 파이어베이스에서는 어떻게 같은 사용자 인지 알아? 인증 제공 업체가 다르잖아.

답변 : Firebase는 여러 인증 제공 업체에서 제공하는 사용자 식별자를 Firebase UID로 변환하여 관리합니다. 각 인증 제공 업체는 Firebase에 사용자를 인증한 후 Firebase에 사용자 정보를 반환하게 됩니다. Firebase는 이 정보를 기반으로 사용자를 Firebase UID로 식별합니다. 사용자가 여러 인증 제공 업체를 통해 인증될 때, Firebase는 동일한 사용자에 대해 각 인증 제공 업체에서 제공된 정보를 비교하여 사용자를 고유하게 식별합니다.

구글 로그인과 카카오 로그인의 경우, 각각의 인증 제공 업체에서 제공되는 사용자 정보는 다를 수 있지만, Firebase는 이러한 정보를 기반으로 사용자를 고유하게 식별합니다. 이는 Firebase가 동일한 사용자에 대해 다양한 인증 방법을 사용하여 인증된 경우에도 일관된 사용자 경험을 제공할 수 있도록 합니다. 따라서 Firebase에서는 각 인증 제공 업체의 사용자 정보를 통합하여 하나의 사용자로 관리할 수 있습니다.

Heo-jieun commented 2 months ago

카카오 개발자에 올라온 이와 관련된 Q&A를 확인해본 결과 파이어베이스에서는 카카오톡을 지원하기 않기 때문에 카카오는 여러 인증 제공 업체 연결을 지원하고 있지 않다. 그래서 구글 로그인의 정보와 카카오 로그인의 정보를 대조해서 같은 사용자를 찾아내는 방법밖에 없으다. 이렇게 되면 소셜 로그인이나 다른 로그인 방식이 추가될 때 마다 DB에 추가해서 회원의 모든 정보를 대조해야하기 때문에 문제가 발생한다. 그래서 사용자가 다른 방식으로 로그인을 진행할 경우 별도의 계좌로 인정하는 방식으로 진행하기로 했다.

관련 링크

https://devtalk.kakao.com/t/oauthprovider-credential/38167/5 https://firebase.google.com/docs/auth/flutter/account-linking?hl=ko