如何使用 Supabase 中的 signUp() 方法在注册时添加其他用户信息

JS_*_*e18 2 javascript authentication vue.js supabase supabase-database

我正在尝试构建一个包含 Supabase 身份验证的 Vue.js 应用程序。我希望在注册时使用内置的 Supabase signUp() 方法来处理其他用户数据。为此,我向 SignUp 对象添加了一个属性,用于存储其他用户数据以及电子邮件和密码:

let { data, error } = await supabase.auth.signUp({
  email: 'someone@email.com',
  password: 'QQlbOIyZuwutISUzceOz',
  data: { isVendor: true }
})
Run Code Online (Sandbox Code Playgroud)

但是,当我在创建用户后运行 console.log 时,我没有看到添加到用户对象中的其他数据属性。

user_metadata我还尝试将数据分配给用户对象中的现有属性,如下所示:

let { data, error } = await supabase.auth.signUp({
  email: 'someone@email.com',
  password: 'QQlbOIyZuwutISUzceOz',
  user_metadata: { isVendor: true }
})
Run Code Online (Sandbox Code Playgroud)

然而,这也没有奏效。如何配置 signUp() 方法(或者可能是 Supabase 仪表板中的注册用户门户)来存储其他用户数据?

Vay*_*age 5

根据文档,在注册时添加额外详细信息的唯一方法是添加如下数据:

const { data, error } = await supabase.auth.signUp(
  {
    email: 'example@email.com',
    password: 'example-password',
    options: {
      data: {
        first_name: 'John',
        age: 27,
      }
    }
  }
)
Run Code Online (Sandbox Code Playgroud)

这些数据将作为 json 添加到名为 raw_user_meta_data 的列中。如果你想保留这个元数据,你可以编写一个如下所示的触发器。

* This trigger automatically creates a user entry when a new user signs up via Supabase Auth.
*/ 
create function public.handle_new_user() 
returns trigger as $$
begin
  insert into public.mrbs_users (id, email, name)
  values (new.id, new.email, new.raw_user_meta_data->>'name');
  return new;
end;
$$ language plpgsql security definer;
create trigger on_auth_user_created
  after insert on auth.users
  for each row execute procedure public.handle_new_user();
Run Code Online (Sandbox Code Playgroud)