ドキュメント›ガイド›Authenticate users (SDK) JavaScript SDK を使用してユーザーを認証する
aura.authの日常的なフローと、実行中のスタックに対して観察された各呼び出しの動作。
11 分 読み取り·レベル 中間·2026/10/12 に改訂
この英語のテキストはフランス語のオリジナルから自動的に生成されたもので、まだレビューされていません。
この翻訳以降、英語のソースが変更されました。一部の情報は古い可能性があります。
このページは自動翻訳されました。英語版が正式です。
auth.tstypescript
import { createClient, isMfaChallenge } from '@aurabase/aurabase-js'
const aura = createClient(process.env.AURA_URL!, process.env.AURA_ANON_KEY!)
// アカウントを作成する
const { data, error } = await aura.auth.signUp({ email: 'ada@example.com', password: 'a-long-passphrase' })
// サインイン
const login = await aura.auth.signInWithPassword({ email: 'ada@example.com', password: 'a-long-passphrase' })
if (login.error) return showError(login.error.message)
if (login.data && isMfaChallenge(login.data)) return askForTotpCode(login.data.mfa_token)
// それ以外の場合はセッションが存在します
どちらの呼び出しも同じ形状を返します。成功すると、 data は access_token、 refresh_token、 expires_in (900 秒) および userを保持し、クライアントはセッションを保存します。次のリクエストはすでに認証されています。
signUp が何を行うかは、プロジェクトの設定によって異なります。私たちのテスト プロジェクトでは、 email_verified: falseを使用してユーザーを一度にサインインしましたが、プロジェクトでは最初に確認が必要な場合があります。
観察されたように、対処する必要がある障害:
| 電話をかける | エラー |
|---|
| パスワードが間違っています | 401、 code: 'invalid_credentials'、「識別子が無効です」 |
| 無効または期限切れのリンクまたはコード | 401、code: 'invalid_otp' |
| プロジェクトで禁止されている場合の匿名サインイン | 403、FORBIDDEN |
signInAnonymously() は電子メール アドレスのないユーザーを作成しますが、新しいプロジェクトでは が無効になり、プロジェクトの認証設定で有効にするまで が返され、403 が返されます。
session.tstypescript
const { data: { session } } = await aura.auth.getSession() // ネットワーク呼び出しなし: ストアを読み取ります
const { data: user } = await aura.auth.getUser() // サーバーに尋ねる
const { data: { subscription } } = aura.auth.onAuthStateChange(({ event, user }) => {
// イベント: 'INITIAL_SESSION' | '署名_IN' | 'TOKEN_REFRESHED' | 'USER_UPDATED' | 'サインアウト' | 「MFA_チャレンジ」
})
subscription.unsubscribe()
実際の実行では、 INITIAL_SESSION、 SIGNED_IN (サインアップ)、 SIGNED_IN (サインイン)、 USER_UPDATED、 TOKEN_REFRESHED、 SIGNED_OUTというシーケンスが生成されました。
- クライアントは、有効期限が切れる前にアクセス トークンを更新します。
aura.auth.refreshSession() を呼び出して強制的に実行します。
getSession() はローカルで高速です。レンダリングに使用します。サーバーのユーザーの現在のビューが必要な場合は、getUser() を使用します。
- 他の場所 (Cookie、サーバー) からクライアントにセッションを渡すには、
setSession(accessToken, refreshToken)を使用します。無効なペアは拒否され、前のセッションが維持されます。
- サーバー側のレンダリングについては、 Next.js App Router および SSRを参照してください。
profile.tstypescript
// メタデータ: `data` で渡します
await aura.auth.updateUser({ data: { theme: 'dark', plan: 'free' } })
// → user.user_metadata は { plan: 'free'、theme: 'dark' } であり、getUser() は同じものを返します
// メールアドレスを変更してください: アドレスはまだ変更されていません
await aura.auth.updateUser({ email: 'new@example.com' })
// 確認リンクが新しいアドレスに移動します。使用されるまで、user.email は古い値を保持します。
// aura.auth.verifyOtp({ type: 'email_change', token }) で確認します。
// パスワードを変更する
await aura.auth.updatePassword('a-new-long-passphrase', 'a-long-passphrase')
パスワードを変更するとサインアウトします
パスワードが変更されると、サーバーはすべてのセッションを取り消します。 updatePassword はローカル セッションをクリアし、 SIGNED_OUTを発行します: 新しいパスワードで再度サインインします。実際の実行では、呼び出し直後の getSession() は空であり、新しいパスワードでのサインインは機能しました。
パスワードを忘れた場合: aura.auth.resetPasswordForEmail({ email }) がリセット電子メールを送信します。その後、ユーザーは verifyOtp({ type: 'recovery', token, password })でそれを完了します。
アカウントを削除します: aura.auth.deleteUser(password) は現在のパスワードを要求し、アカウントを削除して、ローカル セッションをクリアします。
passwordless.tstypescript
// 電子メールによるマジックリンク
await aura.auth.signInWithMagicLink({ email })
// → { メッセージ: "電子メールが存在します。特使との接続を解除します" }
// アカウントが存在しても存在しなくても答えは同じで、アカウントが漏洩することはありません。
// ワンタイムコード
await aura.auth.signInWithEmailOtp(email)
await aura.auth.signInWithSmsOtp(phone)
await aura.auth.verifyOtp({ type: 'email', email, code }) // また: 「sms」、「magiclink」、「signup」、「recovery」、「email_change」
// OAuth: プロバイダーは最初の引数である文字列です
const { data } = await aura.auth.signInWithOAuth('google', { redirectTo: 'https://app.example.com/callback' })
window.location.href = data!.url
signInWithOAuth は開く URL を返します。それ自体はナビゲートしません。プロバイダーはプロジェクトで有効化および構成されている必要があります。そうでない場合、開始 URL は PROVIDER_NOT_CONFIGUREDと応答します。
supabase-js 形式ではありません
signInWithOAuth({ provider: 'google' }) はエラー invalid_providerを返します。最初の引数としてプロバイダーを渡します。
リダイレクトが戻った後、クライアントは単独で URL からセッションを読み取ります (detectSessionInUrl)。 PKCE フローの場合、 flowType: 'pkce'を渡し、デフォルトの永続ストアを保持すると、クライアントがコードを交換します。
linkIdentity(provider)を使用して 2 番目のプロバイダーをサインインしたアカウントにリンクし、 listIdentities() を使用してリストし、 unlinkIdentity(identityId)を使用して 1 つを削除します。
mfa.tstypescript
// 1. 登録: otpauth_url から構築された QR コードを表示します。
const { data: enrol } = await aura.auth.mfaEnroll() // → { シークレット、otpauth_url }
// 2. 認証アプリの最初のコードで確認します。回復コードを受け取ります。
const { data: confirm } = await aura.auth.mfaVerifySetup(codeFromApp) // → { 回復コード: [...] }
// 3. 今後、サインインするとセッションではなくチャレンジが返されます。
const login = await aura.auth.signInWithPassword({ email, password })
if (login.data && isMfaChallenge(login.data)) {
await aura.auth.mfaVerify({ mfa_token: login.data.mfa_token, code: codeFromApp })
}
mfaUnenroll(password) はそれをオフにし、regenerateRecoveryCodes(code) は新しいリカバリ コードを発行します。チャレンジは MFA_CHALLENGE を発行し、mfaVerify が成功するまでセッションは保存されません。
devices.tstypescript
const { data } = await aura.auth.listSessions()
// [{ id, device_info, ip_address, created_at,expires_at, last_used_at, is_current }, …]
await aura.auth.revokeSession(sessionId) // 1 台のデバイスからサインアウトする
await aura.auth.revokeAllSessions() // ここを含め、どこからでもサインアウトします
await aura.auth.signOut() // このデバイスのみ
is_current は、使用しているセッションをマークします。 signOut は、サーバー上にリフレッシュ トークンが存在する場合はそれを取り消し、ローカル セッションをクリアして SIGNED_OUTを発行します。
ユーザー管理には service_role キーが必要です。これはサーバー上でのみ利用可能です。ブラウザで aura.authAdmin を読み取るとエラーがスローされます。
server/users.tstypescript
import { createAdminClient } from '@aurabase/aurabase-js'
const admin = createAdminClient(process.env.AURA_URL!, process.env.AURA_SERVICE_ROLE_KEY!)
const { data: users } = await admin.authAdmin.listUsers({ limit: 20, search: 'ada' })
const { data: created } = await admin.authAdmin.createUser({ email: 'bob@example.com', password: 'a-long-passphrase', email_verified: true })
await admin.authAdmin.banUser(created!.id)
await admin.authAdmin.unbanUser(created!.id)
const { data: link } = await admin.authAdmin.generateLink(created!.id, 'magic') // → { リンク、トークン }
await admin.authAdmin.deleteUser(created!.id)
const { data: stats } = await admin.authAdmin.getUserStats() // → { 合計、検証済み、禁止されている、mfa_enabled、new_7d }
generateLink は、 'magic'、 'recovery' 、または 'invite'を受け入れます。管理クライアントは、プロジェクトの認証設定 (getSettings、 updateSettings)、電子メール テンプレート、すべてのユーザーのセッション、および監査ログ (getAuditLog) も管理します。すべてのメソッドは、 認証リファレンスにリストされています。