firebase-auth
firebase auth についてわからないつまったところをまとめた
firebase auth を SSR で使いたかったのが動機
firebase SDK は2つある
firebase client SDK
クライアントでのみ使用可能
最初にfirebase.initializeAppをする必要がある
これはログインしてなくても可
SDK を用いて firestore などにアクセスできる
これはログインしてなくても firestore にアクセスすることができる
もちろんアクセス制限もできる
firebase admin SDK
サーバなどでよく使われる
admin 権限なので、firestore などもすべてアクセスできる
ログインしている状態とは
「ログインしている」と表現できる状態は複数ある
serialized された auth user 情報が cookie に保存されている
ログイン時
code:json
'{"id": "XXXXXXXXXXX",
"claims":{},
"email": "XXXXXX@gmail.cpm",
"emailVerified":true,
"clientInitialized":false, // client SDK が初期化されているか
}'
非ログイン時
非ログイン時
code:json
'{"id":null,
"claims":{},
"email":null,
"emailVerified":false,
"clientInitialized":false,
}'
この状態だと
クライアントサイドでは firebase.store ~~~ と自由にアクセスできる
おそらく cookie を読み取って firebase client SDK がなんらかの認証しているよという情報を送っているのかな
サーバサイドでは自由にアクセスできない
代わりに下の ID token を使う
ID token がある
id token の実態は JWT
公式だとカスタムトークンと言われている
firebase.auth().signInWithCustomToken(token)とかで利用できる
クライアント、サーバどちらでも使える
1時間しか有効期限がない
有効期限が切れたときは新しいのを自動で発行してくれる
これセキュリティ上あまり意味がなさそうだけどどうなんだろう…?
次にユーザの状態のパターン
以下の組み合わせが3つあり、合計 8 パターンある
firebase client SDK を init してる or ない
ページを訪れたときに init され、閉じると消える
serialize auth user 情報が cookie にある or ない
一度ログインした人ならある
サーバで使えない
id token がある or ない
一度 serialize auth user 情報から id token を生成しているならある
あるけど有効期限が切れてるとかもありうる