I am attempting to build a Vue.js application that includes authentication with Supabase. I wish to use the built-in Supabase signUp() method to handle additional user data when signing up. To do this, I added a property to the signUp object that stores additional user data, along with the email and password:
let { data, error } = await supabase.auth.signUp({
email: 'someone@email.com',
password: 'QQlbOIyZuwutISUzceOz',
data: { isVendor: true }
})
However, when I run console.log after creating the user, I do not see an additional data property added to the user object.
I also tried assigning data to the existing user_metadata
property in the user object, like so:
let { data, error } = await supabase.auth.signUp({
email: 'someone@email.com',
password: 'QQlbOIyZuwutISUzceOz',
user_metadata: { isVendor: true }
})
However, this also did not work. How can I configure the signUp() method (or possibly the registered user portal in my Supabase dashboard) to store additional user data?
According to docs only way to add extra details while signup is to add in data like this :
const { data, error } = await supabase.auth.signUp(
{
email: 'example@email.com',
password: 'example-password',
options: {
data: {
first_name: 'John',
age: 27,
}
}
}
)
These data will be added to a column named raw_user_meta_data as a json. if you want to persist this meta data ypu can write a trigger like below.
* 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();