メモです

メモです

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

【問題】
Firebase v9対応をしていたところ、以下のようなFirestoreのセキュリティルールが常にnullと評価されていた

allow read: if  request.auth != null;

【解決方法】
firestoreをexporしている箇所で

import { initializeApp } from 'firebase/app'
import type { FirebaseOptions } from 'firebase/app'
import { getFirestore, setLogLevel } from 'firebase/firestore'
import { firebaseApp } from 'utils/firebase'
import { getAuth } from 'firebase/auth'

const firebaseConfig: FirebaseOptions = {
 //configをかく
}

const firebaseApp = initializeApp(firebaseConfig)

//これを書く
const auth = getAuth(firebaseApp)

const db = getFirestore(firebaseApp)

export default db

【解決まで】
・v8からv9にアップデートした際に書き方を間違えたかと全く関係ないところを探し回っていた
・通信を眺めていたところ、v8の通信時にはAuthenticationヘッダーがあるのにv9だとないことに気づく
・手動でtokenを付加するとrequest.authfが正しく評価される
↓こんなイージ

const auth = getAuth()
const user = auth.currentUser
const token = user.getIdToken()
setDoc(doc(collection(db, 'users'), ’test’), {
      name: 'hoge',
      token: token,
    })

→v9で必要なコンポーネントのみを呼ぶようになってんじゃんと気づき解決した

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