You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase v2.0注册时仅username写入profiles表,其他元数据字段未同步

解决Supabase注册时元数据未完全同步到profiles表的问题

1. 修正代码中的变量错误

你的代码里stripe_account_user_id字段传的是字符串字面量'stripeAccountId',而非实际创建的Stripe账户ID变量,先去掉引号:

stripe_account_user_id: stripeAccountId, // 使用变量而非字符串字面量
is_founder: true,
website: 'www.sdsoso.cl'

2. 确保profiles表包含目标字段

进入Supabase控制台的数据库->表,检查profiles表是否存在以下字段:

  • stripe_account_user_id(建议类型为text)
  • is_founder(建议类型为boolean)
  • website(建议类型为text)
    如果没有,直接在表编辑器中添加对应字段。

3. 更新用户同步触发器函数

Supabase通过触发器将auth.users表的元数据同步到profiles表,默认触发器仅处理username字段,需修改触发器函数:

  1. 进入Supabase控制台的数据库->函数,找到handle_new_user函数(若未创建则直接新建)
  2. 替换函数内容为:
CREATE OR REPLACE FUNCTION public.handle_new_user() 
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO public.profiles (id, username, stripe_account_user_id, is_founder, website)
  VALUES (
    NEW.id,
    NEW.raw_user_meta_data->>'username',
    NEW.raw_user_meta_data->>'stripe_account_user_id',
    (NEW.raw_user_meta_data->>'is_founder')::boolean,
    NEW.raw_user_meta_data->>'website'
  );
  RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
  1. 保存函数,确保触发器(通常名为on_auth_user_created)关联的是该函数。

补充说明

前端能拿到完整元数据是因为auth.signUp返回的user对象包含user_metadata字段,这部分数据存储在auth.users表的raw_user_meta_data中,而profiles表需要通过触发器主动同步数据。后续若新增字段,只需重复上述步骤:先添加表字段,再更新触发器函数的插入语句。

内容的提问来源于stack exchange,提问作者Richi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:20:43