シークレットモードではFirebaseのsignInWithRedirect/signInWithPopupが機能しない

シークレットモードではFirebaseのsignInWithRedirect/signInWithPopupが機能しない

January 29, 2022

Google Chrome のシークレットモード(インコグニトモード)では Firebase の signInWithRedirectsignInWithPopup が機能しません。

最も遭遇しやすいであろう環境を想定して Google Chrome と記載しましたが、他のブラウザでも発生します。

原因はサードパーティの Cookie がブロックされているためです。

Firebase の signInWithPopupsignInWithRedirect は内部的に Cookie を利用しているようで、Chrome のシークレットモードの場合、デフォルトの設定ではサードパーティの Cookie がブロックされていることから、これが起因となって Firebase のこれらの認証処理が機能しなくなります。

モバイルの Chrome の設定

Incognito Mode Setting | Mobile

PC の Chrome の設定

Incognito Mode Setting | PC

回避策は Firebase 外のライブラリなどでトークンを取得すること #

GitHub でもこれに関する質問が存在しました。2018 年時点の回答ではこの問題に対応する予定はないとのことでしたが、本記事現在も未対応なのを鑑みると、今後対応されることもないでしょう。

The underlying communication protocol we use depend on this (3rd party cookies). We have no plans to support this right now.

https://github.com/firebase/firebase-js-sdk/issues/865

これを回避するには Firebase 以外のライブラリで OAuth トークンを取得し、それを signInWithCredential に渡すという方法しかないようです。

This is a known limitation. signInWithPopup/Redirect will not work when 3rd party cookies are not available. To get around it, you need to use the Google JS sign in SDK to get a Google Access token/ID token and then pass to signInWithCredential.

https://github.com/firebase/firebase-js-sdk/issues/934

シークレットモードでサービスにログインしようとするのは、個人的にはたまにあるケースだとは思うのですが、これに対応できていないのは正直残念ですね。。。