Open2

[supabase] ユーザー作成時にusersテーブルにidを追加する

もっくんもっくん

やりたいこと

ユーザー作成時にusersテーブルにidを追加する

方法

大まかな流れ
0. テーブルの設定

  1. 関数を作る
  2. 1で作った関数を実行するトリガーを作る

テーブルの設定

今回はtest_tableという名前のテーブルを作ります。
RLSは今回は設定しません
カラムは
user_id と created_at にしましょう。
user_idはuuid型にしましょう。
またnameの右にあるリンクボタンを押して、user.idと連携しておきます。

  1. select a schema を auth に
  2. reference to は users に
  3. user_id -> id

関数を作る

左サイドバーから Database > Functions から +create a new function をクリック
上から

  1. Name of function
    関数の名前。わかりやすいのをつけておこう
  2. Schema
    何も考えずにpublic
  3. Return type
    Triggerにする
  4. Argumets
    触らない
  5. Definiton
    ここにsql文を書く
BEGIN
  -- usersテーブルにidを挿入
  INSERT INTO public.users (id)
  VALUES (new.id);

  RETURN NEW;
END;

解説
INSERT INTO public.users (id): usersテーブルのidに追加する
new.id: auth.usersテーブルに新しくサインアップしたユーザーのid
6. Show advanced setting
ONにして Type of Security をSECURITY DEFINER に変更しておく

今回は名前をtest_funcにしました。

トリガーを作る

謎に守られててsql editorからしか作成できないぽいので
ヘッダー右端のsql editorを使って作成します。

create trigger トリガー名 // ①任意のトリガー名
after insert on テーブル名 for each row // ②イベント対象になるテーブル。今回はauth.users
execute function 関数名 () // 上で作った関数を入れる

今回は以下のようにしました

create trigger test_trigger
after insert on auth.users for each row
execute function test_func ();

userを作成するとテーブルに追加されます🎉

メモ:
トリガーの削除の方法
以下コマンドをsql editorに入力

DROP TRIGGER my_auth_trigger ON auth.users;