Aurabase-logo
aurabasisdocumenten
documenten›Gidsen›Authenticate users (SDK)

Authenticeer gebruikers met de JavaScript SDK

De dagelijkse stromen van aura.auth, waarbij het gedrag van elke oproep wordt waargenomen tegen een lopende stapel.

11 min lezen·Niveau tussenproduct·Herzien op 12 okt 2026
Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
De Engelse bron is sinds deze vertaling veranderd. Sommige informatie kan verouderd zijn.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.
#
Basisprincipes

1. Meld u aan en log in

auth.tstypescript
import { createClient, isMfaChallenge } from '@aurabase/aurabase-js'

const aura = createClient(process.env.AURA_URL!, process.env.AURA_ANON_KEY!)

// Maak een account aan
const { data, error } = await aura.auth.signUp({ email: 'ada@example.com', password: 'a-long-passphrase' })

// Log in
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)
// anders bestaat er nu een sessie

Beide oproepen retourneren dezelfde vorm. Bij succes bevat data access_token, refresh_token, expires_in (900 seconden) en de user en slaat de client de sessie voor u op. Het volgende verzoek is al geverifieerd.

Wat signUp doet, hangt af van uw projectinstellingen. In ons testproject werd de gebruiker meteen aangemeld met email_verified: false, en voor een project kan eerst bevestiging nodig zijn.

Storingen die u moet aanpakken, zoals opgemerkt:

BelFout
Verkeerd wachtwoord401, code: 'invalid_credentials', "Identificatiegegevens zijn ongeldig"
Ongeldige of verlopen link of code401, code: 'invalid_otp'
Anoniem inloggen wanneer het project dit niet toestaat403, FORBIDDEN

signInAnonymously() maakt een gebruiker aan zonder e-mailadres, maar in een nieuw project is deze uitgeschakeld en retourneert 403 totdat u deze inschakelt in de auth-instellingen van het project.

#
Staat

2. De sessie en zijn gebeurtenissen

session.tstypescript
const { data: { session } } = await aura.auth.getSession() // geen netwerkoproep: leest de winkel
const { data: user } = await aura.auth.getUser()           // vraagt de server

const { data: { subscription } } = aura.auth.onAuthStateChange(({ event, user }) => {
  // gebeurtenis: 'INITIAL_SESSION' | 'SIGNED_IN' | 'TOKEN_REFRESHED' | 'USER_UPDATED' | 'SIGNED_OUT' | 'MFA_CHALLENGE'
})
subscription.unsubscribe()

Een echte run leverde deze reeks op: INITIAL_SESSION, SIGNED_IN (aanmelding), SIGNED_IN (aanmelding), USER_UPDATED, TOKEN_REFRESHED, SIGNED_OUT.

  • De client vernieuwt het toegangstoken voordat het verloopt. Bel aura.auth.refreshSession() om dit te forceren.
  • getSession() is lokaal en snel: gebruik het voor rendering. Gebruik getUser() als u de huidige serverweergave van de gebruiker nodig heeft.
  • Om een sessie van elders (een cookie, een server) aan de client over te dragen, gebruikt u setSession(accessToken, refreshToken). Een ongeldig paar wordt geweigerd en de vorige sessie blijft behouden.
  • Voor weergave op de server, zie Next.js App Router en SSR.
#
Rekening

3. Profiel en wachtwoord

profile.tstypescript
// Metadata: geef het door in `data`
await aura.auth.updateUser({ data: { theme: 'dark', plan: 'free' } })
// → user.user_metadata is { plan: 'gratis', thema: 'donker' }, en getUser() retourneert hetzelfde

// Wijzig de e-mail: het adres verandert nog NIET
await aura.auth.updateUser({ email: 'new@example.com' })
// Er gaat een bevestigingslink naar het nieuwe adres. Totdat het wordt gebruikt, behoudt user.email de oude waarde.
// Bevestig met: aura.auth.verifyOtp({ type: 'email_change', token })

// Wijzig het wachtwoord
await aura.auth.updatePassword('a-new-long-passphrase', 'a-long-passphrase')
Als u het wachtwoord wijzigt, wordt u afgemeld

De server trekt alle sessies in wanneer het wachtwoord verandert. updatePassword wist de lokale sessie en zendt SIGNED_OUT uit: meld u opnieuw aan met het nieuwe wachtwoord. In een echte run was getSession() direct na het gesprek leeg en werkte inloggen met het nieuwe wachtwoord.

Wachtwoord vergeten: aura.auth.resetPasswordForEmail({ email }) verzendt de reset-e-mail. De gebruiker voltooit het vervolgens met verifyOtp({ type: 'recovery', token, password }).

Verwijder het account: aura.auth.deleteUser(password) vraagt om het huidige wachtwoord, verwijdert het account en wist de lokale sessie.

#
Alternatieven

4. Links, codes en OAuth

passwordless.tstypescript
// Magische link per e-mail
await aura.auth.signInWithMagicLink({ email })
// → { bericht: "Als er een e-mail bestaat, is er een verbindingsrecht voor een gezant" }
// Het antwoord is hetzelfde, ongeacht of het account bestaat of niet: er lekken geen accounts.

// Eenmalige codes
await aura.auth.signInWithEmailOtp(email)
await aura.auth.signInWithSmsOtp(phone)
await aura.auth.verifyOtp({ type: 'email', email, code })     // ook: 'sms', 'magiclink', 'aanmelden', 'herstel', 'email_change'

// OAuth: de provider is het EERSTE argument, een string
const { data } = await aura.auth.signInWithOAuth('google', { redirectTo: 'https://app.example.com/callback' })
window.location.href = data!.url

signInWithOAuth retourneert de te openen URL; het navigeert niet vanzelf. De provider moet in het project zijn ingeschakeld en geconfigureerd, anders antwoordt de start-URL PROVIDER_NOT_CONFIGURED.

Niet de supabase-js-vorm

signInWithOAuth({ provider: 'google' }) retourneert de fout invalid_provider. Geef de provider als eerste argument door.

Na de terugleiding leest de client de sessie zelf vanaf de URL (detectSessionInUrl). Voor de PKCE-stroom geeft u flowType: 'pkce' door, behoudt u de standaard permanente opslag en wisselt de client de code voor u uit.

Koppel een tweede provider aan een aangemeld account met linkIdentity(provider), vermeld deze met listIdentities() en verwijder er een met unlinkIdentity(identityId).

#
Tweede factor

5. Multi-factor authenticatie

mfa.tstypescript
// 1. Inschrijven: toon de QR-code opgebouwd uit otpauth_url
const { data: enrol } = await aura.auth.mfaEnroll()   // → {geheim, otpauth_url }
// 2. Bevestig met de eerste code uit de authenticator-app: je ontvangt herstelcodes
const { data: confirm } = await aura.auth.mfaVerifySetup(codeFromApp) // → { herstelcodes: [...] }

// 3. Vanaf nu levert inloggen een uitdaging op in plaats van een sessie
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) schakelt het uit en regenerateRecoveryCodes(code) geeft nieuwe herstelcodes uit. Een uitdaging zendt MFA_CHALLENGE uit en er wordt geen sessie opgeslagen totdat mfaVerify slaagt.

#
Apparaten

6. Apparaten en sessies

devices.tstypescript
const { data } = await aura.auth.listSessions()
// [{ id, device_info, ip_address, aangemaakt_at, vervalt_at, last_used_at, is_current }, …]

await aura.auth.revokeSession(sessionId)   // één apparaat uitloggen
await aura.auth.revokeAllSessions()        // overal uitloggen, ook hier
await aura.auth.signOut()                  // alleen dit apparaat

is_current markeert de sessie die u gebruikt. signOut trekt het vernieuwingstoken op de server in als die er is, wist de lokale sessie en verzendt SIGNED_OUT.

#
Server

7. Gebruikers beheren

Gebruikersbeheer heeft een service_role sleutel nodig. Het is alleen beschikbaar op de server: het lezen van aura.authAdmin in een browser levert een fout op.

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') // → { link, token }
await admin.authAdmin.deleteUser(created!.id)

const { data: stats } = await admin.authAdmin.getUserStats() // → { totaal, geverifieerd, verbannen, mfa_enabled, new_7d }

generateLink accepteert 'magic', 'recovery' of 'invite'. De admin-client beheert ook de authenticatie-instellingen van het project (getSettings, updateSettings), e-mailsjablonen, sessies van elke gebruiker en het auditlogboek (getAuditLog). Elke methode wordt vermeld in de authenticatiereferentie.

Laatst bijgewerkt · 12 okt 2026