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字段,需修改触发器函数:
- 进入Supabase控制台的数据库->函数,找到
handle_new_user函数(若未创建则直接新建) - 替换函数内容为:
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;
- 保存函数,确保触发器(通常名为
on_auth_user_created)关联的是该函数。
补充说明
前端能拿到完整元数据是因为auth.signUp返回的user对象包含user_metadata字段,这部分数据存储在auth.users表的raw_user_meta_data中,而profiles表需要通过触发器主动同步数据。后续若新增字段,只需重复上述步骤:先添加表字段,再更新触发器函数的插入语句。
内容的提问来源于stack exchange,提问作者Richi
相关产品推荐
相关产品推荐

