🕶️

[supabase] 特定のメールアドレスでしか登録を許可しない

に公開

やりたいこと

メールアドレスのドメインが特定のドメイン(今回は @hoge.com)でしか登録を許可しない。

方法

functionとtriggerを使う
sqlエディタで設定していく。
まずはfunctionを作る

function
CREATE OR REPLACE FUNCTION public.check_user_domain()
RETURNS TRIGGER AS $$
BEGIN
    -- @hoge.com ドメインのみを許可
    IF NEW.email NOT LIKE '%@hoge.com' THEN
        RAISE EXCEPTION 'INCORRECT_DOMAIN: Only @hoge.com emails are allowed.';
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

次にtriggerを作る

trigger
CREATE TRIGGER check_user_domain_trigger
BEFORE INSERT ON auth.users
FOR EACH ROW EXECUTE PROCEDURE public.check_user_domain();

auth.usersがinsertされる前に先ほど作った関数(check_user_domain)を実行するという仕組み。

確認

特定のメールアドレスではないとユーザー作成時にエラーが返されるようになっています。

Discussion