Firebase Authenticationで"Unable to process request..."エラーに悩まされている話
追記(20210602)
We are well aware of this issue and we are working hard on a medium-to-long term fix. This is a really tough problem and certainly not a quick one to address.
issueに、この問題の解決までしばらく時間がかかりそうとの投稿がありました。今できる策として、下記に記載した内容に加え
-
signInWithPopup
の代わりにsignInWithRedirect
を使用すること - GoogleログインSDKなどの、各種providerが提供しているSDKを連携すること(https://firebase.google.com/docs/auth/web/google-signin#expandable-2)
が指摘されています。筆者はfirebase-authを使わない方式に変更しようと考えていますが、各種provider提供のSDKを利用してうまくいったという方がいらっしゃれば、コメント等で教えていただければ幸いです。
TL;DR
- Firebase Authenticationでソーシャルログインを行うと、不定期に "Unable to process request..." エラーが発生する
- iOSでデフォルト設定になっている「サイト越えトラッキングを防ぐ」(設定>Safari>サイト越えトラッキングを防ぐ)機能が原因の一つと思われる
- Firebaseのcustom domainにwebサイトと同じドメインを設定する(same-siteにする)ことで、発生頻度は減ったが、解決には至っていない
- 解決に向けて情報を集めたい
ログイン処理が中断する
運営しているWebサイトで、認証システムとしてFirebase Authenticationを採用しているのですが、iOSでのログイン時に時々下記のようなエラーが表示され、ログイン処理が中断する問題に悩まされています。
Unable to process request due to missing initial state.
This may happen if browser sessionStorage is inaccessible or accidentally cleared.
※該当issueはこちら
この事象は、iOS上でTwitterやFacebook等のソーシャルログインを実行した後、FirebaseのコールバックURLにリダイレクトする際に不定期に発生しています。通常のSafariではあまり発生しませんが、アプリ内Safariだとかなりの頻度で発生します。
処理の流れ(Twitterの場合)
- ログイン処理開始
- Twitter上のログインページへ遷移
- ログイン成功後、FirebaseのコールバックURLにリダイレクト
- 3.の時点で、"Unable to process request..." のエラーが表示される
当方で確認した限りでは、Android端末では発生しませんでした。しかし、上記issueにはAndroidでの問題報告もなされており、条件次第では発生する可能性があります。
custom domainを設定してみる
調べていくうちに、iOS設定の「サイト越えトラッキングを防ぐ」をOFFにすることで、上記事象が発生しなくなることが分かりました。
※「サイト越え(cross-site)」については、下記記事にまとめられています。
cross-site trackingが問題ならば、firebase側のコールバック先とwebサイトをsame-siteにすることで解決できるかも…issueにもそのようなことが書かれているし…
ということで、custom domainをwebサイトに合わせて設定したところ、上記事象が発生する頻度は減りました。ただし、それでも断続的に発生します。
※custom domainの設定については下記など様々記事があるので、この場では省略します。
有効な対処方法の報告はなし
既にFirebaseサポートにバグ報告はされているようなのですが、その後の進展報告はありません。
いつ改善されるかも分からない状況のため、新たに認証システムを検討される際には、Firebase Authenticationは外した方が良さそうです。
同じような事象で悩んでいる方がいらっしゃったら、ぜひコメント等で情報共有していただけると嬉しいです。
Discussion
貴重な情報ありがとうございます。
apple sign inをAndroidにて実装中にこのバグに遭遇しました。
appleからのコールバック後に必ずこの状況になるのは確認できました。という共有だけ…