【Firebase Authentication】別々のログインプロバイダでもメールアドレスが同じだと起きるエラーを解決

以下の記事でも書いたように個人開発しているWEBアプリではFirebase Authenticationを使用しSSOログイン認証を採用しています。Facebookをログインプロバイダとして追加して動作確認を行っていた際に遭遇したエラーです。

※この時点で使用していたログインプロバイダはGoogle と Twitterです。先に記載しますが、Facebook特有のエラーというわけではありません。

【Firebase Authentication】JWT認証で未来のタイムスタンプが使われていると怒られた…。

環境情報

今回も言語に依存したエラーではなかったですが、一応使用していたgolangのsdkとnpmのパッケージ名は記載しておきます。

firebase-admin-go: v3.9.0
https://github.com/firebase/firebase-admin-go

firebase: v7.10.0
https://www.npmjs.com/package/firebase

異なる認証元で既に同じメールアドレスが使われている?

開発中だったのでsdkにて発生したエラーはconsole.logで開発者コンソールに表示していました。そのエラーメッセージが以下にようになっていました。

“An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.”

「異なる認証元で既に同じメールアドレスが使われているから、このメールアドレスで関連付けられているプロバイダでサインインしてください。」的な感じですね。調べてみると、Firebase Atuhenticationのデフォルト設定では異なるログインプロバイダであっても、同じメールアドレスであればログインできないようになっているようです。

解決方法

解決方法は簡単です。Firebase Authenticationのコンソールには「1 つのメールアドレスにつき複数のアカウント」という設定があるので、こちらをクリックして出てくるダイアログで「同一のメールアドレスを使用して複数のアカウントを作成できるようにします」にチェックを入れて保存すれば良いです。

ちゃんとFirebase Authenticationのコンソール見ていないのが問題ですね…。

参考

https://stackoverflow.com/questions/47975207/in-firebase-login-getting-error-an-account-already-exists-with-the-same-email-a