今日学んだこと:SupabaseでのGoogle認証エラーに関して
2025年9月4日
概要
今日はSupabaseについて学んだ。
今回生じた問題
- Google認証でエラーが起きていた
http://localhost:3000/auth/callback?error=server_error&error_code=unexpected_failure&error_description=Database+error+saving+new+user#error=server_error&error_code=unexpected_failure&error_description=Database+error+saving+new+user
調べたところDBにユーザーが登録できないエラーだった。 問題として考えられるのは以下。
- RLSポリシーの問題
- トリガー関数の問題
- 環境変数の問題 → Supabase URLやキーが間違っている
トリガー関数とは: DBで特定のイベントが発生した時に自動実行される関数
RLSポリシーや環境変数、リダイレクトURIが登録されているかを確認したが、そこは問題なさそうだった。
原因
当初のトリガー関数には、avatar_urlがあった。
INSERT INTO public.profiles (id, email, name, avatar_url, provider)
VALUES (
NEW.id,
NEW.email,
COALESCE(...),
NEW.raw_user_meta_data->>'avatar_url', -- この行が問題
COALESCE(...)
);
しかしprofilesテーブルからavatar_urlを消していた。 それなのにトリガー関数から消さなかったため、 エラーが生じていた。
SupabaseのAuthログから判明した。
ERROR: column "avatar_url" of relation "profiles" does not exist (SQLSTATE 42703)
テーブル設計とトリガー関数の同期が必須なことがわかった。
CREATE OR REPLACE の活用→関数の削除・再作成ではなく、直接上書きが効率的