🙆

Supabaseでユーザ作成する方法

2024/07/13に公開

DashBoardで手動作成する

AuthenticationのタブからAdd userボタンでユーザ追加することができます。
招待の方法として以下の2種類の方法が用意されています。

  • Send invitation
  • Create new user

それぞれ、後述のAPI「auth.admin.inviteUserByEmail」と「auth.admin.createUser」が裏では実行されていると思われます。

SupabaseのAdd userボタン

Send invitationの方法ではユーザ作成時点でパスワードの設定がされません。パスワードでのログインを前提とするアプリケーションの場合は、別途初期パスワード登録する仕組みの用意が必要です。

APIでユーザ作成する

supabase.auth.signUp

セルフサインアップ可能なアプリケーションなどで利用するAPIです。
「メールアドレスまたは電話番号」と「パスワード」が必須項目となります。

const { data, error } = await supabase.auth.signUp({
  email: 'example@email.com',
  password: 'example-password',
})

https://supabase.com/docs/reference/javascript/auth-signup

supabase.auth.admin.createUser

業務用アプリケーションなどで管理者がユーザを作成するような場合などで利用するAPIです。
ユーザ作成はされますが、招待メールなどの通知はされないため、別途作成したユーザに連携する仕組みが必要です。

const { data, error } = await supabase.auth.admin.createUser({
  email: 'user@email.com',
  password: 'password',
  user_metadata: { name: 'Yoda' }
})

https://supabase.com/docs/reference/javascript/auth-admin-createuser

supabase.auth.admin.inviteUserByEmail

業務用アプリケーションなどで管理者がユーザを作成するような場合などで利用するAPIです。
ユーザ作成に成功すると登録したメールアドレス宛に招待メールが送信され、ユーザ作成されたことが通知されます。ただし、この時点ではパスワードの設定がされていないため、パスワードでのログインを前提とするアプリケーションの場合は、別途初期パスワード登録する仕組みを用意する必要があります。

const { data, error } = await supabase.auth.admin.inviteUserByEmail('email@example.com')

https://supabase.com/docs/reference/javascript/auth-admin-inviteuserbyemail

指定したメールアドレス宛にメールリンクとワンタイムパスワードを生成するためのAPIです。
以下のtype指定することにより様々な用途のメールリンクを生成することができます。

  • signup
  • invite
  • magiclink
  • recovery
  • email_change_current
  • email_change_new

typeにsignupinvitemagiclinkを指定することでユーザ作成することができます。

const { data, error } = await supabase.auth.admin.generateLink({
  type: 'signup',
  email: 'email@example.com',
  password: 'secret'
})

https://supabase.com/docs/reference/javascript/auth-admin-generatelink

Seederで開発用DBに初期ユーザ登録をする

auth.usersテーブルとauth.identitiesテーブルにデータをInsertする。
実装はこちらで紹介されている方法が参考になります。
https://qiita.com/kurogoma939/items/964dd0dfd87cc26e0da0

Discussion