For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /tr/docs/mobile/passkeys.md (or send Accept: text/markdown).
Passkey ile oturum açma
Oturumu uygulamaya geri döndüren bir tarayıcı aktarımıyla parolasız oturum açma.
Aktarım nasıl çalışır
Passkey ile oturum açma uygulamada başlar ve sistem tarayıcısında biter. Uygulama, WebBrowser.openAuthSessionAsync aracılığıyla {API URL}/auth?mobile_callback=<deep link> adresini açar; web sayfası herhangi bir oturum açma yöntemini tamamladıktan sonra, oturum çerezini ve bir state nonce'u taşıyarak <scheme>://auth/callback adresine geri yönlendiren GET /api/auth/mobile-handoff'u çağırır.
Her deneme, değişmeden gidip gelmesi gereken yeni bir nonce üretir — eşleşmeyen bir state parametresi stateMismatch olarak reddedilir; böylece eski veya sahte bir geri çağrı oturum enjekte edemez. Dönen çerez, Better Auth Expo istemcisinin kullandığı aynı SecureStore kavanozuna (supastack.auth_cookie) birleştirilir, ardından oturum deposu bilgilendirilir ve oturum açılmış uygulama işlenir.
Kapatılan bir tarayıcı sayfası, hata yerine sessiz bir cancelled sonucuna çözümlenir; bu durumda oturum açma ekranını değiştirmeden bırakın.
# apps/mobile/.env.local
EXPO_PUBLIC_APP_SCHEME=supastack
# apps/web/.env.local — server side
AUTH_PASSKEY_ENABLED=true
MOBILE_ALLOWED_ORIGINS=İzin listesini iki tarafta da aynı tutun
İki taraf da geri çağrı hedefini doğrular: uygulama yalnızca <scheme>://auth ile yapılandırılmış üretim kaynaklarını kabul eder, sunucu ise EXPO_PUBLIC_APP_SCHEME ve MOBILE_ALLOWED_ORIGINS'ten oluşturulan aynı listeyi denetler. Kimlik bilgisi taşıyan, bilinmeyen şemalar içeren veya benzer görünümlü sonekler taşıyan geri çağrılar, herhangi bir çerez hareket etmeden reddedilir.
Üretimde MOBILE_ALLOWED_ORIGINS zorunludur ve yerel olmayan tam HTTPS kaynaklarını listelemelidir — joker karakterler kabul edilmez. Uygulama paketlenmiş olarak dağıtılırken sunucu ortamını istek başına okur; bu nedenle bir şema veya kaynak değişikliği hem yeni bir uygulama derlemesi hem de bir sunucu dağıtımı gerektirir. Yalnızca bir tarafı değiştirmek, aktarımların kapalı başarısız olmasına yol açar.
Diğer parolasız yöntemler
Aynı oturum açma ekranı, e-posta tek kullanımlık kodları (önce requestEmailOtp ardından verifyEmailOtp) ve callbackURL ile signIn.social üzerinden Apple veya Google sosyal oturum açma sunar. Passkey'ler, sunucuda AUTH_PASSKEY_ENABLED=true olduğunda görünür; bir hesabın passkey ve iki faktörlü kurulumu yine web uygulamasında Ayarlar → Güvenlik altında bulunur.
Doğrulama ve sorun giderme
Hedeflenen derlemede soğuk başlangıç geri çağrısını, çalışan uygulamaya dönüşü, kapatılan tarayıcı sayfasını ve süresi dolmuş oturumu uygulayın. Tipli hatalar — passkeyUnavailable, browserFailed, untrustedCallback, missingCookie, malformedCookie, cookieStoreFailed — her biri farklı bir kırılmayı tanımlar; stateMismatch, nonce'un değişmeden geri dönmediği ve denemenin doğru şekilde reddedildiği anlamına gelir.
Her aktarım reddediliyorsa, dağıtılan derlemedeki EXPO_PUBLIC_APP_SCHEME'yi sunucunun şeması ve MOBILE_ALLOWED_ORIGINS ile karşılaştırın — bir taraf diğeri olmadan yeniden dağıtıldığında bu ikili uyumsuzlaşır.