로그인을 하고 웹을 사용하다가 로그아웃을 했을 때
다시 동일한 구글 계정으로 로그인을 할 수도 있겠지만, 새로운 계정으로 로그인을 하려는 경우도
분명 존재할 것이다
그렇지만 지금까지 내 프로젝트는 로그인 버튼을 누르게 되면 별다른 추가적인 조치를 해놓지 않았기 때문에 이전에 로그인 됐었던 계정으로 자동 로그인이 되어 버린다
즉 , 하나의 브라우저에서 로그인을 했다면 더 이상 다른 계정을 선택할 수 없다는 것이다
그래서 구글 자동 로그인을 막고 로그인을 할 때마다 직접 구글 계정을 선택할 수 있도록 해야 했다
이 문제를 해결하려면 직접 Google 인증 관련 옵션을 설정해야 한다
현재 프로젝트에 Firebase를 사용하고 있다고 해도 Firebase SDK는 오로지 Google 로그인 기능을
간편하게 사용하게 해주는 도구일 뿐, Google 계정 설정까지는 다루지 않기 때문이다
기존 Google 로그인을 처리하는 로직은 아래와 같다
여기서 2가지가 눈에 띈다
GoogleAuthProvider
signInWithPopup
우리는 Google 로그인을 사용하고 있으므로 , 로그인을 시도하게 될 경우 Google 제공업체 객체를 사용해 Firebase에 인증합니다
이 때 팝업 창을 띄우거나
로그인 페이지로 리디렉션
하여 사용자가 Google 계정에 로그인하도록 유도해서 사용자 인증을 진행하는데 ,
아래의 사진처럼 팝업창을 띄울 때 사용하는 것이 signInWithPopup이다
GoogleAuthProvider에 대해 알아보자면
웹 앱을 빌드하는 경우, Google 계정을 가지고 Firebase 자바스크립트 SDK로 로그인 과정을
매우 쉽게 처리할 수 있도록 해주는 객체이다
GoogleAuthProvider는 Google에서 제공하는 OAuth 2.0 인증 공급자이며 ,
이를 사용하면 사용자는 자신의 Google 계정을 통해 Firebase에 로그인할 수 있는 것이다
Firebase 인증은 다양한 OAuth 공급자를 지원하며, Google 뿐만이 아니라 Facebook, Twitter 등과 같은 플랫폼을 사용해 Firebase 애플리케이션에 로그인할 수 있다
GoogleAuthProvider에 대해 보다 자세한 내용을 알기 위해
Google OpenID Connect 부분의 공식문서에 들어가보니
' OpenID Connect | Authentication | Google for Developers ' 공식문서
prompt 라는 항목의 select_account부분이 바로 내가 원했던 기능이다
자동으로 로그인을 진행하지 않고 매번 계정을 직접 선택하는 것이다
그렇다면 이 { prompt: 'select_account' }
옵션을 어떻게 적용할까?
그 해답은 Firebase의 공식문서에 나와 있다
위의 내용을 해석해 보면 아래와 같다
{ prompt: 'select_account' }
를그러므로 이 부분을 아래와 같이 적용하게 되면 구글의 자동 로그인을 방지할 수 있게 된다
Google 공식문서에서 Google의 OAuth 2.0 인증 API에서 사용할 수 있는 매개변수들을 보면
여기서 사용한 prompt는 선택사항이지만 , 그 외에 필수 요소들이 정말 많다
그렇지만 지금껏 Firebase로 Google로그인을 사용하면서 나는 이런 매개변수들을 사용한 적이 없다
왜냐하면 OAuth 인증에서 필요한 client_id, nonce, response_type과 같은 세부적인 매개변수들은 Firebase가 자동으로 관리해주기 때문이다
구체적으로는 Firebase SDK가 이런 저수준의 디테일을 처리하므로 개발자는 고수준의 인증 작업에만 집중할 수 있는 것이다
위에서 언급했던 것처럼 Google 로그인을 사용하는 경우에는
따라서 Firebase를 사용하면 개발자가 직접 OAuth 인증 프로세스의 복잡한 세부사항을 관리할 필요 없이, 손쉽게 소셜 로그인 기능을 구현할 수 있는 것이다
내가 위에 링크로 올려둔 구글 공식문서를 보면 OpenID Connect와 OAuth 2.0라는 2개의 용어가 등장하는데 둘은 같은것이 아니다
Firebase SDK를 통해 Google 로그인을 사용하는 경우, Firebase는 OAuth 2.0 인증을 사용하여 Google에서 사용자 인증을 받고, 인증 성공 시 ID 토큰을 받는다. 이 ID 토큰은 OpenID Connect의 일부로, 사용자의 identity를 나타낸다
따라서 Firebase에서 Google 로그인을 사용하는 경우, 실제로는 OAuth 2.0과 OpenID Connect 모두를 사용하는 것이지만, 이 모든 과정이 Firebase SDK에 의해 자동화되므로 개발자가 신경 쓸 필요가 없는 것이다