👍

Supabase - ユーザー追加されたらprofileテーブルにも追加するやつ

2024/11/22に公開

profileテーブルを作成する(以下はdrizzleの例)

export const profileTable = pgTable(
  "profile",
  {
    id: uuid("id").primaryKey(),
    firstName: text("first_name").notNull(),
    lastName: text("last_name").notNull(),
    image: text("image"),
  }
);

以下SQLエディタにて

CASCADEを追加

ALTER TABLE public.profile
ADD CONSTRAINT fk_user FOREIGN KEY (id) REFERENCES auth.users (id) ON DELETE CASCADE;

RLSを追加

alter table public.profile enable row level security;

triggerを作成

coalesceで、first_nameやlast_nameがnullでも空文字を入れてエラーにならないようにした。
(管理画面から追加するとnot null制約でエラーになったので)

-- inserts a row into public.profiles
create function public.handle_new_user()
returns trigger
language plpgsql
security definer set search_path = ''
as $$
begin   
    insert into public.profile (id, first_name, last_name)   
    values (new.id, 
            coalesce(new.raw_user_meta_data ->> 'first_name', ''''), 
            coalesce(new.raw_user_meta_data ->> 'last_name', ''''));   
    return new; 
end;

$$;

-- trigger the function every time a user is created
create trigger on_auth_user_created
  after insert on auth.users
  for each row execute procedure public.handle_new_user();

Discussion