FirebaseCloudFunctions
NOTICE
アウトバウンド ネットワーキング … Google サービス専用
TIPS
Cloud Functions から Firestore を使うには admin 経由で呼び出し
Firestore のイベントを検知して Functions を実行
Cloud Functionsをrewritesで統合するとセッションを持てない(後述)。
ここでいう__sessionはおそらくブラウザ側のSDK(埋め込むやつ)で書き込む認証用っぽい。
後述する『 Firebase ID トークン 』を格納するためのもの
送信クッキー制限(__session)はHosting側ドメインのみで、Cloud Functions側は無制限。
"セッションを持てない" とは、Functions用ドメインでは無制限のためそこではセッションを持てたが、統合することでセッションを持てる場所を失ったという意味
express-session の store オプションを使った DB 連携 (MongoDB)
express-session の store オプションを使った DB 連携 (DynamoDB)
クロスドメインのPOSTはBODYを受け取ることができない?
cors ミドルウェアで受け取れるようになった
Functionsの実行に認証を前提とするには
Functions側
validateFirebaseIdToken関数をExpressのミドルウェアとして切り出して活用する
ブラウザ側
firebase.auth().currentUser.getIdToken()を使ってCookieキー__sessionに格納
Google認証のfirebase.auth().signInWithPopup()で得られるトークン(credential.accessToken)とは別モノ
アプリとして複数の認証方法を提供しても統合した1つの結果とするためのものと推測
『 Firebase ID トークン 』 (JWT)
firebase.json の rewrites と Cloud Functions
{ "source": "/theapi", "function": "theapi" } とすると、もともと
http://localhost:5001/awesome-app/us-central1/theapiがエントリポイントだったものが
http://localhost:5000/theapiにマッピングされ、exports.theapiの中にあるapp.get('/', ...とマッチしなくなる。これはapp.get('/theapi', ...として寄せるか、再度Expressでくくると動く。