プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Hasura
  • 【Firebase】「Cloud Function」と「Hasura」の連携
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Firebase】「Cloud Function」と「Hasura」の連携

10.09

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

前提条件

  • 事前に「firebase-tools」のインストールや、ログインが必要です。
  • 事前にfirebaseでプロジェクトを作成していること。
  • 該当プロジェクトがBlazプランに変更されていること。(Sparkプランではだめ)
  • Hasuraを構築しておきましょう。

Cloud Function

料金制度、プラン

プロジェクトごとにプランを設定できます。いつでも簡単に戻せるので学習のために使っている場合は学習後はすぐにSparkに戻しておくと良いでしょう。

プラン

Spark

無料プランです。

Blaze

従量制の有料プランです。

Cloud Functionの構築

1
firebase init

Which Firebase features do you want to set up for this directory? Press Space to select features, then Enter to confirm your choices.

「Functions: Configure a Cloud Functions directory and its files」を選択する。

Please select an option:

「Use an existing project」を選択する。

Select a default Firebase project for this directory:

firebaseで作ったプロジェクトを選択します。

What language would you like to use to write Cloud Functions?

JS or TSプロジェクトで使っている方を選びましょう。

Do you want to use ESLint to catch probable bugs and enforce style?

ESLintを適用する場合はyを選びます。試すだけなら切っておいた方が無難です。(よくわからないエラーが出る場合があるので)

Do you want to install dependencies with npm now?

dependenciesをインストールするならyで問題ないです。

作業ディレクトリにfunctionsというフォルダが作成されています。

Hasuraとの連携

ディレクトリ移動

1
cd functions

Hasuraとの連携

1
firebase functions:config:set hasura.url="HasuraのエンドポイントURL" hasura.admin_secret="Hasuraのadminシークレット"

index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
 
admin.initializeApp()
 
export const setCustomClaims = functions.auth.user().onCreate(async (user) => {
  const customClaims = {
    'https://hasura.io/jwt/claims': {
      'x-hasura-default-role': 'hasuraで定義したロール名',
      'x-hasura-allowed-roles': ['hasuraで定義したロール名'],
      'x-hasura-user-id': user.uid,
    },
  }
  try {
    await admin.auth().setCustomUserClaims(user.uid, customClaims)
    await admin.firestore().collection('user_meta').doc(user.uid).create({
      refreshTime: admin.firestore.FieldValue.serverTimestamp(),
    })
  } catch (e) {
    console.log(e)
  }
})

Hasuraへのリクエストヘッダー(customClaims)

x-hasura-default-role

Hasuraにリクエストする際のデフォルトのロール、プログラム内で上書きもできます。

x-hasura-allowed-roles

存在するロールの一覧を配列で指定します。使いたいロールは全て追記しましょう。

x-hasura-user-id

ログインしているユーザーIDを指定します。firebaseと連携する場合は、firebaseのユーザーIDなどを指定すると良いでしょう。Hasuraのpermissionsの機能と組み合わせれば、特定のユーザーで登録したものをそのユーザーでしか閲覧できないというような実装を簡単に行うことができます。

admin.auth().setCustomUserClaims

firebaseにcustomClaims付きでユーザー登録します。なお、customClaimsの反映には少しラグがあります。

await admin.firestore().collection('user_meta').doc(user.uid).create({ xxx })

firebaseのfirestoreにユーザーのメタ情報を書き込んでいます。customClaimsの反映にラグがあるのでそれが終わったことを実装するアプリケーションに別途通知する必要があるためです。コレクションの名前としてuser_metaという名前で生成しています。

refreshTime: admin.firestore.FieldValue.serverTimestamp(),

refreshTimeというフィールドをfirestoreに作って、サーバー時間を格納しています。

Cloud Functionsのデプロイ

1
firebase deploy --only functions

表示されたURLにアクセスしたら無事サイトを閲覧することができます。

スポンサーリンク
  • 2022 10.09
  • miyabisan2
  • コメントを書く
  • Hasura
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2022 10.09

    【Hasura】認証方式(「Hasura admin secret」、「JWT認証」など)について

  2. 2022 10.09

    【Hasura】テーブルの設定(「リレーションシップ」、「Permissions」)について

  3. 2022 10.16

    【Hasura】「Migrations」&「Metadata」について

  4. 2022 10.08

    【Next.js】「Hasura」と「Apollo Client」の連携

  5. 2022 10.16

    【Hasura】基本、Railsとの連携

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Hasura】テーブルの設定(「リレーションシップ」…

【Hasura】認証方式(「Hasura admin …

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー