Clientopties, fouten, nieuwe pogingen en time-outs
Het gedrag dat door elke service van de SDK wordt gedeeld, en de opties die dit veranderen.
1. Maak de klant aan
createClient(url, key, options?) neemt de project-URL en één sleutel. Het project wordt geïdentificeerd door de host van de URL, er hoeft dus geen project-ID door te geven. Gebruik in een lokale stapel een URL met het projectsubdomein, zoals http://my-app-ab12.localhost:8080; met een kale http://localhost:8080 drukt de client een waarschuwing af, omdat de gateway niet kan zien welk project u bedoelt.
Gebruik de openbare sleutel (aura_anon_…) in browsers en apps. Een service_role sleutel (aura_sk_…) hoort alleen op uw server en de client dwingt deze af:
In een browser genereert createClient wanneer er een service_role-sleutel wordt ontvangen, zodat een gelekte sleutel niet per ongeluk kan worden verzonden. Stel refuseServiceRoleInBrowser: false in om de fout te downgraden naar een waarschuwing; doe dit niet in de productie.
Elke service hangt buiten de client: aura.auth, aura.db, aura.storage, aura.realtime, aura.functions, aura.ai, aura.notifications en aura.from('table') als snelkoppeling voor aura.db.from('table'). Zie de clientreferentie.
2. Opties
| Optie | Standaard | Effect |
|---|---|---|
auth.persistSession | true in een browser | Houd de sessie tussen het laden van pagina's |
auth.storage | localStorage in een browser, geheugen elders | Waar de sessie leeft: passeer uw eigen winkel (cookies voor SSR) |
auth.autoRefresh | true | Vernieuw het toegangstoken voordat het verloopt en houd tabbladen gesynchroniseerd |
auth.detectSessionInUrl | true in een browser | Lees een sessie vanaf de URL na een OAuth-omleiding en maak vervolgens de URL schoon |
fetch | globalThis.fetch | Uw eigen fetch, voor tests of proxy's |
retry | true | Probeer opnieuw te lezen bij tijdelijke fouten. false wordt uitgeschakeld, of { enabled, maxRetries } |
requestTimeoutMs | 30000 | Termijn van een verzoek. 0 schakelt het uit. |
onEvent | geen | Ontvangt waarneembaarheidsgebeurtenissen, zie hieronder |
debug | false | Druk elke gebeurtenis ook af met console.debug('[aurabase]', event) |
refuseServiceRoleInBrowser | true | Gooi wanneer een service_role-sleutel een browser bereikt |
Voor weergave op de server gebruikt u de op cookies gebaseerde clients die worden beschreven in Next.js App Router en SSR.
3. Het foutobject
Elke oproep retourneert { data, error } en gooit nooit. Als het mislukt, is error een AuraError:
Er kwam een echte mislukte oproep terug:
| Veld | Betekenis |
|---|---|
status | De HTTP-status. 0 betekent dat de fout plaatsvond vóór enige reactie: netwerk, time-out of een weigering door de client. |
code | Een stabiele identificatie. Servercodes behouden hun waarde; de klant voegt de onderstaande codes toe. |
message | Een leesbare uitleg |
details | Het ruwe antwoordlichaam |
retryAfter | Seconden om te wachten, vanaf een Retry-After header, op een 429 |
isNotFound, isUnauthorized, isForbidden, isRateLimited | Snelkoppelingen op status |
Codes geproduceerd door de klant zelf (status 0): timeout, network_error, invalid_response (een succes waarvan de hoofdtekst geen JSON is), no_session, refresh_discarded, invalid_path, invalid_body. Authenticatie voegt codes toe zoals invalid_credentials, weak_password, email_already_in_use, user_not_found, invalid_otp, session_expired, session_revoked en rate_limit_exceeded. Een 429 bevat altijd rate_limit_exceeded.
Test data in plaats van error wanneer u de waarde nodig heeft. Sommige oproepen slagen zonder inhoud (204), en dan zijn zowel data als error null.
4. Nieuwe pogingen en time-outs
Nieuwe pogingen. De client probeert een verzoek alleen automatisch opnieuw als deze allemaal geldig zijn:
- de methode is
GETofHEAD(eenPOST,PUT,PATCHofDELETEwordt nooit opnieuw afgespeeld, dus niets wordt tweemaal uitgevoerd); - de reactiestatus is
408,429,502,503of504, of het netwerk is mislukt; - Er zijn minder dan 3 nieuwe pogingen gedaan.
De vertraging is willekeurig tussen 0 en min(500 ms × 2^attempt, 10 s). Een kopbal van Retry-After wint ervan, met een maximum van 60 seconden. Opnieuw geprobeerde verzoeken hebben een header X-Retry-Count. Een time-out wordt niet opnieuw geprobeerd.
Gemeten tegen een server die tweemaal 503 antwoordde, daarna 200:
Time-outs. Een verzoek dat geen antwoord krijgt binnen requestTimeoutMs (standaard 30 s) eindigt met status: 0 en code: 'timeout'. Het lezen van de hoofdtekst wordt begrensd door dezelfde limiet, dus een server die headers verzendt en vervolgens vastloopt, kan het gesprek niet ophangen. Een verzoek aan een server die nooit antwoordde, met een limiet van 400 ms, retourneerde de fout na 405 ms.
In twee gevallen wordt deze limiet niet gebruikt omdat ze hun eigen limiet beheren: een oproep waarbij u een AbortSignal doorgeeft en uploadt. Functies gebruiken hun eigen timeout optie, zie Fouten, time-outs en nieuwe pogingen.
5. Observeer de cliënt
onEvent ontvangt één gebeurtenis per opmerkelijk ding dat de client doet. Het zorgt er nooit voor dat een verzoek mislukt: een uitzondering die door je hook wordt gegenereerd, wordt genegeerd.
kind | Velden | Wanneer |
|---|---|---|
retry | attempt, status?, url | Vóór een nieuwe poging |
timeout | url | Een verzoek heeft requestTimeoutMs bereikt |
refresh-success | geen | Een sessievernieuwing is gelukt |
refresh-discarded | reason | Een vernieuwing is afgebroken omdat de sessie ondertussen is gewijzigd |
jwks-fetch-failed | baseUrl | De ondertekeningssleutels konden niet worden opgehaald (lokale tokencontroles) |
storage-blocked | op | De browser weigerde opslagtoegang |
Van URL's in gebeurtenissen zijn de queryreeks en het fragment verwijderd, omdat ze geheimen kunnen bevatten (?apikey=, ondertekende links).
6. Sessies en tokens
- De client verzendt
apikeybij elk verzoek enAuthorization: Bearer <access token>zodra een gebruiker is aangemeld. - Het vernieuwt het toegangstoken als er minder dan 30 seconden resteren. Gelijktijdige vernieuwingen worden samengevoegd tot één vernieuwingstoken, zodat er één keer een roterend vernieuwingstoken wordt gebruikt.
- Een
401activeert één keer vernieuwen en één keer opnieuw afspelen van het verzoek en stopt vervolgens. - In een browser worden vernieuwingen over de tabbladen heen gecoördineerd.
aura.auth.onAuthStateChange(callback)vertelt je overSIGNED_IN,SIGNED_OUT,TOKEN_REFRESHED,USER_UPDATEDenMFA_CHALLENGE. Zie de auth-gids.