SupabaseでOAuthログインしたらINSERTでつまづいた
困った
ログインするときにメールアドレスとパスワードの組み合わせを使うパターンを作ったのですが、追加でOAuthのパターンも作りました。作ったのは良いのですが、テーブルにデータを入れる際、new row violates row-level security policyと出て6時間くらい右往左往しました。というわけでここに供養と備忘録を兼ねて書いておこうと思います。
原因
テーブルには以下のRLSを設定していました。よくある、自分しか見れないし、自分しかデータを入れられないようにする設定ですね。
create policy "User can select their own peer."
on public.peers for select
using ( user_id = auth.uid() );
create policy "Users can insert their own peer."
on public.peers for insert
with check ( user_id = auth.uid() );
調べると、Supabaseにログインしたのにログインしていない状況でした。な、何を言っているのかわからねーと思うが、私もわかりませんでした。
OAuthのログインではクライアント側のsupabaseClientを使ったのに対し、テーブルにINSERTする際にはサーバー側のsupabaseClientを使ったのが原因でした。そりゃあそうなるよなって話なんですが、なんでこうなったかと言うと、メールアドレスとパスワードの組み合わせログインはサーバー側でやっていたので、それに引きずられてしまったんですね。クライアント側のsupabaseClientを使ってINSERTすれば、特になんの問題もなく動きました。
OAuthとの併用を考えると、メールアドレスで登録する方もクライアント側でやったほうが良いのかもしれません。
現場からは以上です。
Author And Source
この問題について(SupabaseでOAuthログインしたらINSERTでつまづいた), 我々は、より多くの情報をここで見つけました https://zenn.dev/smallstall/articles/51171b6d3e0d43著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol