ortの灰ログ

人狼のことや技術のことや日々雑感

iOS16でFirebase authが通らなくなった問題の対応備忘録

事象

iOS16の各種ブラウザやMacOS SafariからFirebase authenticationの signInWithRedirectgetRedirectResult するとユーザー情報が取得できず null が返される

対応方法概要

サードパーティのストレージ アクセスをブロックするブラウザーでの壊れたリダイレクト サインインを軽減する  |  Firebase
の軽減策 #3の通り対応する

原因調査

ぐぐっていたら
Login to Firebase does not work on Safari 16.1 beta · Issue #6716 · firebase/firebase-js-sdk · GitHub
これに行き着いた。これやん。

リプライの
https://github.com/firebase/firebase-js-sdk/issues/6716#issuecomment-1320593233
ここから
サードパーティのストレージ アクセスをブロックするブラウザーでの壊れたリダイレクト サインインを軽減する  |  Firebase
これに行き着いた。
引用すると、

サードパーティのストレージ アクセスをブロックするブラウザーでは機能しません

.

認証フローがアプリ ドメインに戻ると、サインイン ヘルパー ドメインブラウザー ストレージにアクセスします。この軽減策と次の (コードを自己ホストするための) 軽減策により、ブラウザーによってブロックされるクロスオリジン ストレージ アクセスが排除されます。

とのこと。iOS16やMacOS Safariが先に厳しくなったのね。

対応内容

  • Nuxt2でFirebase authenticationのTwitter認証を利用
  • Netlifyにデプロイしている

自分のアプリでやっていることとしてはこんな感じなので、

アプリ側の設定

軽減策#3のやつ。
https://<app domain>/__/auth/ から https://<project>.firebaseapp.com/__/auth/ にproxyしてあげる必要がある(リダイレクトではダメ)ので、
Nuxt2の場合

static/_redirects

/__/auth/* https://<project>.firebaseapp.com/__/auth/:splat 200

を設定して再デプロイ。

Netlify側の設定

軽減策#1前半のやつ。
自分の場合 appDomain はNetlifyのEnvironment variablesで設定しているので、
環境変数appDomain にあたる内容を

<project>.firebaseapp.com から <app domain> に変更(して再デプロイ)

Twitter側の設定

軽減策#1後半のやつ。
Twitter Developer Portalで連携しているアプリの設定を開き User authentication settings Edit → App infoCallback URI / Redirect URLhttps://<app domain>/__/auth/handler を追加(既存のと変更でも良いかも)

以上。これでiOS16でも動作するようになった。

備考

軽減策#2の signInWithPopup() でも良いはずだが、
自分の場合はPWA対応もしているため、これは使えなかった。
(PWAだとsignInWithPopupが動作しない)