Hasura×Firebase Authで認証を作る

前提条件

  • NuxtJS
  • Hasura
  • Firebase
  • GraphQL & Apollo Client

上記の使い方をある程度わかっていること

ステップ1 Hasuraの環境変数の設定

  • HASURA_GRAPHQL_ADMIN_SECRETを設定します。こちらは任意の値ですが、忘れないようにメモしておきましょう。こちらを設定すると、リクエストを投げても、下記エラーが発生するようになります。
GraphQL error: x-hasura-admin-secret/x-hasura-access-key required, but not found
  • HASURA_GRAPHQL_JWT_SECRETの登録します。(FirebaseのプロジェクトIDが必要です。)
{
    "type":"RS256",
    "jwk_url": "https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com",
    "audience": "<firebase-project-id>",
    "issuer": "https://securetoken.google.com/<firebase-project-id>"
}
  • HASURA_GRAPHQL_UNAUTHORIZED_ROLEを設定します。値は、anonymousにしておきましょう。この値は、認証していないユーザーのデータアクセス権限を設定する為です。

上記を設定した後に、Hasuraプロジェクトのコンソールに入り、data→permissionで詳細な権限を設定します。認証していないユーザーでもアクセスできるデータは、permissionを許可します。

Hasura Firebase

権限がない場合は、下記のエラーがスローされます。(例えばUserモデルへのmutation)

[GraphQL error]: Message: field "update_users_by_pk" not found in type: 'mutation_root', Location: undefined, Path: undefined

なので、HeadersにX-Hasura-Roleadminanonymousを入れる必要があります。
また、X-Hasura-Admin-Secretを入れておくと、実行が管理者権限になります。

参考