【问题标题】:supabase delete user through applicationsupabase通过应用程序删除用户
【发布时间】:2023-02-05 05:16:01
【问题描述】:

我有一个 supabase 项目,我希望用户能够删除他们的帐户。 每个用户在public.profiles 中都有个人资料。我想我可以让用户删除他们的个人资料,然后使用触发器处理帐户的删除。

所以我创建了这个:

CREATE OR REPLACE FUNCTION deleteUser() RETURNS TRIGGER AS $$
BEGIN
    DELETE FROM auth.users WHERE auth.users.id = OLD.user_id;
    RETURN OLD;
END $$ LANGUAGE 'plpgsql';

CREATE TRIGGER deleteUserTrigger 
    AFTER DELETE
ON public.profiles
FOR EACH ROW 
    EXECUTE PROCEDURE deleteUser();

在 supabase 表编辑器界面中,它工作得很好,但是当我通过我的应用程序删除一个帐户时,它失败了:code: "42501", message: "permission denied for table users"

const { error } = await client.from("profiles").delete().eq("user_id", user.id);
console.log(error)

没有触发器就没有错误并且配置文件被删除(但该帐户显然仍然存在)。

任何帮助将非常感激!

我找到了 this 但我不确定..

【问题讨论】:

    标签: authentication sql-delete supabase user-management


    【解决方案1】:

    如果有人遇到同样的问题,可以通过添加security definer 来解决

    所以sql变成这样:

    CREATE OR REPLACE FUNCTION deleteUser() RETURNS TRIGGER AS $$
    BEGIN
        DELETE FROM auth.users WHERE auth.users.id = OLD.user_id;
        RETURN OLD;
    END $$ LANGUAGE 'plpgsql' security definer;
    
    CREATE TRIGGER deleteUserTrigger 
        AFTER DELETE
    ON public.profiles
    FOR EACH ROW 
        EXECUTE PROCEDURE deleteUser();
    

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多