👍
Supabase - ユーザー追加されたらprofileテーブルにも追加するやつ
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