我正在构建一个带有身份验证和用户数据的下一个 js 应用程序。我第一次尝试supabase,并使用一些在线帮助来创建一些表和触发器以将用户信息保存在配置文件表中。身份验证在没有任何触发器的情况下工作正常,但是当我编写触发器以将信息保存在配置文件表中时,身份验证失败。档案表和用户表的字段名是否需要匹配。
CREATE OR REPLACE FUNCTION handle_new_user()
RETURNS trigger AS $$
BEGIN
INSERT INTO profiles (id, full_name, avatar_url)
VALUES (new.id, new.raw_user_meta_data->>'full_name', new.raw_user_meta_data->>'avatar_url');
RETURN new;
END;
$$ language plpgsql security definer;
CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW EXECUTE PROCEDURE handle_new_user();
您能显示您的
profiles
表的定义吗?我在设置触发器时也遇到了问题,结果只是一些小问题,只需要调整一下。
如果你检查日志,它通常会抛出一个错误,你可以看到它在抱怨什么。如果需要,您可以调整该功能来记录错误,以便您可以看到问题所在。
CREATE OR REPLACE FUNCTION handle_new_user() RETURNS trigger AS $$
BEGIN
INSERT INTO profiles (id, full_name, avatar_url)
VALUES (
new.id,
new.raw_user_meta_data->>'full_name',
new.raw_user_meta_data->>'avatar_url'
)
ON CONFLICT (id) DO NOTHING; -- This will ignore the insert if the id already exists
RETURN NEW;
EXCEPTION
WHEN OTHERS THEN
RAISE WARNING 'An error occurred while handling the new user: %', SQLERRM;
RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW EXECUTE PROCEDURE handle_new_user();
只要您有一个包含 id、full_name 和 avatar_url 字段的配置文件表,上面的代码就没有理由不起作用。如果它仍然不起作用,那么一定要检查日志以了解原因。
希望这有帮助!