メモです

メモです

Firebase v9のFirestoreセキュリティルールでrequest.authが常にnullになる

【発生していた問題】
Firebaseにおいてv9への移行対応をしていたところ、Firestoreのセキュリティルールで、v8では認証状態に応じて値が格納されていたrequest.authが
v9ではrequest.authが常にnullとなっていた

↓こういうルールを実装していた
allow read: if  request.auth != null;

【解決方法】
セキュリティルールを使う場合はgetFirestoreと同時にgetAuthする

const firebaseApp = initializeApp(firebaseConfig)
const db = getFirestore(firebaseApp)

//これを追加する
const auth = getAuth(firebaseApp)

【解決まで】
・ぼんやりと通信を眺めていたところ、v8の通信時にはAuthenticationヘッダーがあるのにv9のときはないことに気づく
・v9でもAuthenticationヘッダーに手動でtokenを付加するとrequest.authに想定通りの挙動をするようになった
→v8のときはfirestoreを呼んだらauthも自動的に呼んでくれたが、v9では必要なコンポーネントのみを呼ぶようになってるから明示的にauthを呼ぶ必要があった

【雑記】
・firebaseはindexedDBにtokenを突っ込んでる
・setLogLevel('debug')でfirestoreのデバッグ流せることを知った