Hasura Cloud + Firebase Auth
プロジェクト作成
料金プランはFreeでよい
AWSにしてTokyoを選ぶ
database
色々選択肢がある
HasuraはPostgreSQLと最も相性がよいのでそれにする
Heroku, Google Cloud SQL, Neonなど選択肢がある
Neonの無料プランが良いらしいのでそれにする
NeonでHasura認証を使ってログインする
dbを作ってconnect ~ からURLを取得する
Hasuraのコンソールでdbを追加する
生のURLを指定するよりも環境変数に入れることを推奨されるのでそうする
NEON_DB_URL
postgresql://neondb_owner:...
Firebase Authenticationとの連携
やりたいこと
Firebase Authでのアカウントを作成時にHasuraのusersテーブルにもレコードを追加したい
概要
Cloud Functions for Firebase(以下Firebase Functionsと呼ぶ)を使ってアカウント作成時にHasuraのAPIを叩いてdbにデータを追加する
Firebase Authのブロッキング関数を使いたいので、Firebase AuthをFirebase Auth with Identity Platformにアップグレードする必要がある
FirebaseとGoogle Cloud Platformの設定
Firebaseのコンソールでプロジェクトを作る
Firebase Authenticationを有効にする
Firebase AuthをGoogle Identity Platformと連携させる
Identity Platformは従量課金なので気をつけること
開発
firebase-toolsを入れる
npm install -g firebase-tools
functionsのプロジェクトを作る
code:a
mkdir firebase_functions
firebase init functions
beforeUserCreateでHasuraを叩く
TODO: もうちょい詳細を書く
GraphQLを生で書いても良いが型を使いたいならコード生成をする必要がある
https://the-guild.dev/graphql/codegen を使うとよさそう
schemaはHasuraから取得する(envなどにHasuraのAPI Keyを置く)
documentはfunctionsから叩きたいmutation/queryをgraphqlファイルに書く
ハマりポイント
Firebase Authの設定で「ブロッキング関数」の設定が抜けている
https://scrapbox.io/files/69083654e6d39b962c174330.png
Google Identity Platformへの連携を忘れている
onCreateなどはgen1のもので、gen2では使わない(AIが混乱しがち)
Firebase Authのコンソールからアカウントを作ってもFirebase Functionsがトリガーされない
Admin SDKから作った場合はトリガーされない、という仕様らしい
HasuraのAPI Keyなどを環境変数として使う場合、GCPのSecret Managerで管理する(ので、有効にする必要がある)
defineSecret や defineString
使うサービス
Hasura Cloud
Neon
Firebase
Firebase Authentication (with Identity Platform)
Cloud Functions for Firebase (gen2)
Google Cloud Platform
Cloud Run
Identity Platform
Secret Manager