> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 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.


## Sonraki

[Mobil API](https://supastack.dev/tr/docs/mobile/api.md)
