İstemci seçenekleri, hatalar, yeniden denemeler ve zaman aşımları
SDK'nın her hizmetinin paylaştığı davranış ve onu değiştiren seçenekler.
1. İstemciyi oluşturun
createClient(url, key, options?), proje URL'si ve bir anahtarı alır. Proje, URL'nin ana bilgisayarı tarafından tanımlanır, dolayısıyla aktarılacak bir proje kimliği yoktur. Yerel bir yığında, proje alt alan adını içeren http://my-app-ab12.localhost:8080 gibi bir URL kullanın; çıplak bir http://localhost:8080 ile istemci bir uyarı yazdırır çünkü ağ geçidi hangi projeyi kastettiğinizi söyleyemez.
Tarayıcılarda ve uygulamalarda ortak anahtarı (aura_anon_…) kullanın. Bir service_role anahtarı (aura_sk_…) yalnızca sunucunuza aittir ve istemci bunu uygular:
Bir tarayıcıda, createClient , bir service_role anahtarı aldığında atar, dolayısıyla sızdırılan bir anahtar kazara gönderilemez. Hatayı uyarıya düşürmek için refuseServiceRoleInBrowser: false değerini ayarlayın; bunu üretimde yapmayın.
Her hizmet istemciyi kapatır: aura.auth, aura.db, aura.storage, aura.realtime, aura.functions, aura.ai, aura.notifications ve aura.from('table') , aura.db.from('table') kısayolu olarak. istemci referansına bakın.
2. Seçenekler
| Seçenek | Varsayılan | Etki |
|---|---|---|
auth.persistSession | Bir tarayıcıda true | Oturumu sayfa yüklemeleri arasında tut |
auth.storage | localStorage tarayıcıda, bellek başka yerde | Oturumun yaşadığı yer: kendi mağazanızı geçin (SSR için çerezler) |
auth.autoRefresh | true | Erişim belirtecini süresi dolmadan yenileyin ve sekmeleri senkronize tutun |
auth.detectSessionInUrl | Bir tarayıcıda true | OAuth yönlendirmesinden sonra URL'deki oturumu okuyun ve ardından URL'yi temizleyin |
fetch | globalThis.fetch | Testler veya proxy'ler için kendi fetch'niz |
retry | true | Geçici hatalarda okumaları yeniden deneyin. false devre dışı bırakılır veya { enabled, maxRetries } |
requestTimeoutMs | 30000 | Bir isteğin zaman sınırı. 0 bunu devre dışı bırakır. |
onEvent | hiçbiri | Gözlemlenebilirlik olaylarını alır, aşağıya bakın |
debug | false | Ayrıca her olayı console.debug('[aurabase]', event) ile yazdırın |
refuseServiceRoleInBrowser | true | Bir service_role anahtarı tarayıcıya ulaştığında atın |
Sunucu tarafı işleme için Next.js Uygulama Yönlendiricisi ve SSR içinde açıklanan çerez tabanlı istemcileri kullanın.
3. Hata nesnesi
Her çağrı { data, error } değerini döndürür ve hiçbir zaman fırlatılmaz. Başarısız olduğunda, error bir AuraError olur:
Gerçekten başarısız bir çağrı geri döndü:
| Alan | Anlamı |
|---|---|
status | HTTP durumu. 0 hatanın herhangi bir yanıttan önce meydana geldiği anlamına gelir: ağ, zaman aşımı veya istemci tarafından reddedilme. |
code | Sabit bir tanımlayıcı. Sunucu kodları değerlerini korur; müşteri aşağıdaki kodları ekler. |
message | Okunabilir bir açıklama |
details | Ham yanıt gövdesi |
retryAfter | 429 üzerinde Retry-After başlığından beklenecek saniyeler |
isNotFound, isUnauthorized, isForbidden, isRateLimited | status ile ilgili kısayollar |
İstemcinin kendisi tarafından üretilen kodlar (durum 0): timeout, network_error, invalid_response (gövdesi JSON olmayan bir başarı), no_session, refresh_discarded, invalid_path, invalid_body. Kimlik doğrulama, invalid_credentials, weak_password, email_already_in_use, user_not_found, invalid_otp, session_expired, session_revoked ve rate_limit_exceeded gibi kodlar ekler. Bir 429 her zaman rate_limit_exceeded taşır.
Değere ihtiyaç duyduğunuzda error yerine data değerini test edin. Bazı çağrılar içerik olmadan başarılı olur (204) ve ardından hem data hem de error null olur.
4. Yeniden denemeler ve zaman aşımları
Yeniden denemeler. İstemci, yalnızca aşağıdakilerin tümü geçerli olduğunda bir isteği otomatik olarak yeniden dener:
- yöntem
GETveyaHEAD'dir (POST,PUT,PATCHveyaDELETEhiçbir zaman yeniden oynatılmaz, dolayısıyla hiçbir şey iki kez çalıştırılmaz); - yanıt durumu
408,429,502,503veya504veya ağ başarısız oldu; - 3'ten az yeniden deneme gerçekleşti.
Gecikme 0 ile min(500 ms × 2^attempt, 10 s) arasında rastgeledir. Retry-After başlığı, 60 saniyeyle sınırlı olarak onu kazanır. Yeniden denenen istekler X-Retry-Count başlığını taşır. Zaman aşımı yeniden denenmez.
İki kez 503 yanıtını veren ve ardından 200 yanıtını veren bir sunucuya göre ölçülmüştür:
Zaman aşımları. requestTimeoutMs (varsayılan olarak 30 saniye) içerisinde yanıt alamayan bir istek status: 0 ve code: 'timeout' ile biter. Gövdeyi okumak aynı sınırla sınırlıdır, dolayısıyla başlıkları gönderen ve ardından duraklayan bir sunucu çağrıyı kapatamaz. Hiçbir zaman yanıt vermeyen bir sunucuya 400 ms sınırıyla yapılan istek, 405 ms sonra hatayı döndürdü.
İki durum, kendi durumlarını yönettikleri için bu sınırı kullanmaz: AbortSignal ilettiğiniz bir çağrı ve yüklemeler. İşlevler kendi timeout seçeneğini kullanır; bkz. Hatalar, zaman aşımları ve yeniden denemeler.
5. Müşteriyi gözlemleyin
onEvent müşterinin yaptığı her önemli şey için bir olay alır. Hiçbir zaman bir isteğin başarısız olmasına neden olmaz: Kancanız tarafından oluşturulan bir istisna göz ardı edilir.
kind | Alanlar | Ne zaman |
|---|---|---|
retry | attempt, status?, url | Yeniden denemeden önce |
timeout | url | Bir istek requestTimeoutMs isabetine ulaştı |
refresh-success | hiçbiri | Oturum yenileme başarılı oldu |
refresh-discarded | reason | Bu arada oturum değiştiği için yenileme iptal edildi |
jwks-fetch-failed | baseUrl | İmzalama anahtarları alınamadı (yerel belirteç kontrolleri) |
storage-blocked | op | Tarayıcı depolama erişimini reddetti |
Olaylardaki URL'lerin sorgu dizeleri ve parçaları kaldırılmıştır çünkü bunlar sırlar (?apikey=, imzalı bağlantılar) taşıyabilmektedir.
6. Oturumlar ve belirteçler
- İstemci her istekte
apikeyve kullanıcı oturum açtığındaAuthorization: Bearer <access token>gönderir. - 30 saniyeden az kaldığında erişim belirtecini yeniler. Eşzamanlı yenilemeler tek bir yenilemede birleştirilir, böylece dönüşümlü yenileme jetonu bir kez kullanılır.
- Bir
401isteğin bir yenilemesini ve bir tekrarını tetikler, ardından durur. - Bir tarayıcıda yenilemeler sekmeler arasında koordine edilir.
aura.auth.onAuthStateChange(callback)sizeSIGNED_IN,SIGNED_OUT,TOKEN_REFRESHED,USER_UPDATEDveMFA_CHALLENGEhakkında bilgi verir. kimlik doğrulama kılavuzuna bakın.