Client options, errors, retries and timeouts
Das Verhalten aller Dienste des SDK und die Optionen, die es ändern.
1. Erstellen Sie den Client
createClient(url, key, options?) benötigt die Projekt-URL und einen Schlüssel. Das Projekt wird durch den Host der URL identifiziert, daher muss keine Projekt-ID übergeben werden. Verwenden Sie in einem lokalen Stack eine URL mit der Projekt-Subdomäne, z. B. http://my-app-ab12.localhost:8080; Bei einem bloßen http://localhost:8080 gibt der Client eine Warnung aus, da das Gateway nicht erkennen kann, welches Projekt Sie meinen.
Verwenden Sie den öffentlichen Schlüssel (aura_anon_…) in Browsern und Apps. Ein service_role-Schlüssel (aura_sk_…) gehört nur zu Ihrem Server und wird vom Client erzwungen:
In einem Browser löst createClient aus, wenn er einen service_role-Schlüssel empfängt, sodass ein durchgesickerter Schlüssel nicht versehentlich versendet werden kann. Legen Sie refuseServiceRoleInBrowser: false fest, um den Fehler auf eine Warnung herabzustufen. do not do this in production.
Jeder Dienst hängt vom Client ab: aura.auth, aura.db, aura.storage, aura.realtime, aura.functions, aura.ai, aura.notifications und aura.from('table') als Verknüpfung für aura.db.from('table'). Siehe die Client-Referenz.
2. Optionen
| Option | Standard | Wirkung |
|---|---|---|
auth.persistSession | true in einem Browser | Halten Sie die Sitzung zwischen dem Laden der Seite aufrecht |
auth.storage | localStorage in einem Browser, Speicher woanders | Wo die Sitzung lebt: Passieren Sie Ihren eigenen Shop (Cookies für SSR) |
auth.autoRefresh | true | Aktualisieren Sie das Zugriffstoken, bevor es abläuft, und halten Sie die Tabs synchron |
auth.detectSessionInUrl | true in einem Browser | Lesen Sie eine Sitzung von der URL nach einer OAuth-Umleitung und bereinigen Sie dann die URL |
fetch | globalThis.fetch | Ihr eigenes fetch für Tests oder Proxys |
retry | true | Wiederholen Sie den Lesevorgang bei vorübergehenden Fehlern. false deaktiviert oder { enabled, maxRetries } |
requestTimeoutMs | 30000 | Zeitlimit einer Anfrage. 0 deaktiviert es. |
onEvent | keine | Empfängt Beobachtbarkeitsereignisse, siehe unten |
debug | false | Drucken Sie außerdem jedes Ereignis mit console.debug('[aurabase]', event) aus. |
refuseServiceRoleInBrowser | true | Wird ausgelöst, wenn ein service_role-Schlüssel einen Browser erreicht |
Verwenden Sie für das serverseitige Rendering die in Next.js App Router und SSR beschriebenen Cookie-basierten Clients.
3. Das Fehlerobjekt
Jeder Aufruf gibt { data, error } zurück und löst nie aus. Wenn dies fehlschlägt, ist error ein AuraError:
Ein wirklich fehlgeschlagener Anruf ergab Folgendes:
| Feld | Bedeutung |
|---|---|
status | Der HTTP-Status. 0 bedeutet, dass der Fehler vor irgendeiner Antwort aufgetreten ist: Netzwerk, Zeitüberschreitung oder eine Ablehnung durch den Client. |
code | Eine stabile Kennung. Servercodes behalten ihren Wert; Der Kunde fügt die folgenden Codes hinzu. |
message | Eine lesbare Erklärung |
details | Der rohe Antworttext |
retryAfter | Sekunden Wartezeit, von einem Retry-After-Header bis zu einem 429 |
isNotFound, isUnauthorized, isForbidden, isRateLimited | Verknüpfungen auf status |
Vom Client selbst erstellte Codes (Status 0): timeout, network_error, invalid_response (ein Erfolg, dessen Körper nicht JSON ist), no_session, refresh_discarded, invalid_path, invalid_body. Bei der Authentifizierung werden Codes wie invalid_credentials, weak_password, email_already_in_use, user_not_found, invalid_otp, session_expired, session_revoked und rate_limit_exceeded hinzugefügt. Ein 429 trägt immer rate_limit_exceeded.
Testen Sie data anstelle von error, wenn Sie den Wert benötigen. Einige Aufrufe sind ohne Inhalt erfolgreich (204), und dann sind sowohl data als auch error null.
4. Wiederholungsversuche und Zeitüberschreitungen
Wiederholungsversuche. Der Client wiederholt eine Anfrage nur dann automatisch, wenn alle folgenden Punkte erfüllt sind:
- die Methode ist
GEToderHEAD(einPOST,PUT,PATCHoderDELETEwird nie wiederholt, sodass nichts zweimal ausgeführt wird); - der Antwortstatus ist
408,429,502,503oder504, oder das Netzwerk ist ausgefallen; - Es sind weniger als drei Wiederholungsversuche erfolgt.
Die Verzögerung liegt zufällig zwischen 0 und min(500 ms × 2^attempt, 10 s). Ein Retry-After-Kopfball gewinnt, die Höchstdauer beträgt 60 Sekunden. Wiederholte Anfragen tragen einen X-Retry-Count-Header. Eine Zeitüberschreitung wird nicht wiederholt.
Gemessen an einem Server, der zweimal 503 geantwortet hat, dann 200:
Zeitüberschreitungen. Eine Anfrage, die innerhalb von requestTimeoutMs (standardmäßig 30 s) keine Antwort erhält, endet mit status: 0 und code: 'timeout'. Das Lesen des Textkörpers unterliegt derselben Beschränkung, sodass ein Server, der Header sendet und dann anhält, den Anruf nicht abbrechen kann. Eine Anfrage an einen Server, die nie antwortete, mit einem Limit von 400 ms, gab den Fehler nach 405 ms zurück.
In zwei Fällen wird dieses Limit nicht verwendet, da sie ihr eigenes Limit verwalten: ein Anruf, bei dem Sie ein AbortSignal übergeben, und Uploads. Funktionen verwenden ihre eigene Option timeout, siehe Fehler, Zeitüberschreitungen und Wiederholungsversuche.
5. Beobachten Sie den Kunden
onEvent empfängt ein Ereignis pro bemerkenswerter Aktion des Clients. Es führt nie dazu, dass eine Anfrage fehlschlägt: Eine von Ihrem Hook ausgelöste Ausnahme wird ignoriert.
kind | Felder | Wann |
|---|---|---|
retry | attempt, status?, url | Vor einem erneuten Versuch |
timeout | url | Eine Anfrage traf requestTimeoutMs |
refresh-success | keine | Eine Sitzungsaktualisierung war erfolgreich |
refresh-discarded | reason | Eine Aktualisierung wurde verworfen, da sich die Sitzung zwischenzeitlich geändert hat |
jwks-fetch-failed | baseUrl | Die Signaturschlüssel konnten nicht abgerufen werden (lokale Tokenprüfungen) |
storage-blocked | op | Der Browser verweigerte den Speicherzugriff |
Bei URLs in Ereignissen werden die Abfragezeichenfolge und das Fragment entfernt, da sie Geheimnisse enthalten können (?apikey=, signierte Links).
6. Sitzungen und Token
- Der Client sendet
apikeybei jeder Anfrage undAuthorization: Bearer <access token>, sobald ein Benutzer angemeldet ist. - Es aktualisiert das Zugriffstoken, wenn weniger als 30 Sekunden verbleiben. Gleichzeitige Aktualisierungen werden zu einer zusammengefasst, sodass ein rotierendes Aktualisierungstoken einmal verwendet wird.
- Ein
401löst eine Aktualisierung und eine Wiederholung der Anforderung aus und stoppt dann. - In einem Browser werden Aktualisierungen über mehrere Registerkarten hinweg koordiniert.
aura.auth.onAuthStateChange(callback)informiert Sie überSIGNED_IN,SIGNED_OUT,TOKEN_REFRESHED,USER_UPDATEDundMFA_CHALLENGE. Siehe im Authentifizierungshandbuch.