Firebase Authentication'ü kullanarak kullanıcılara oturum açmaları için bir bağlantı içeren bir e-posta gönderebilirsiniz. Kullanıcılar bu bağlantıyı tıklayarak oturum açabilir. Bu süreçte kullanıcının e-posta adresi de doğrulanır.
E-posta ile oturum açmanın birçok avantajı vardır:
- Kolay kayıt ve oturum açma.
- Uygulamalar arasında şifrelerin yeniden kullanılması riskini azaltır. Bu risk, iyi seçilmiş şifrelerin güvenliğini bile tehlikeye atabilir.
- Bir kullanıcının kimliğini doğrularken aynı zamanda kullanıcının e-posta adresinin gerçek sahibi olduğunu doğrulama olanağı.
- Kullanıcıların oturum açmak için erişilebilir bir e-posta hesabına sahip olması yeterlidir. Telefon numarası veya sosyal medya hesabına sahip olmanız gerekmez.
- Kullanıcı, mobil cihazlarda zahmetli olabilecek şifre girmek (veya hatırlamak) zorunda kalmadan güvenli bir şekilde oturum açabilir.
- Daha önce e-posta tanımlayıcısı (şifre veya birleşik) ile oturum açmış mevcut bir kullanıcının oturum açma yöntemi, yalnızca e-posta ile oturum açacak şekilde yükseltilebilir. Örneğin, şifresini unutmuş bir kullanıcı, şifresini sıfırlamak zorunda kalmadan oturum açabilir.
Başlamadan önce
Android projenizi oluşturma
Henüz yapmadıysanız Firebase'i Android projenize ekleyin.
Modül (uygulama düzeyi) Gradle dosyanıza (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
) Android için Firebase Authentication kitaplığının bağımlılığını ekleyin. Kitaplık sürümlendirmesini kontrol etmek için Firebase Android BoM simgesini kullanmanızı öneririz.Ayrıca, Firebase Authentication'ü ayarlama kapsamında Google Play Hizmetleri SDK'sını uygulamanıza eklemeniz gerekir.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.8.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }Firebase Android BoM kullanıldığında uygulamanız Firebase Android kitaplıklarının daima uyumlu sürümlerini kullanır.
(Alternatif) BoM
Firebase BoM kullanmamayı seçerseniz her Firebase kitaplık sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM'ı kullanmanızı önemle tavsiye ederiz. Bu, tüm sürümlerin uyumlu olmasını sağlar.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.1.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }
Firebase projeniz için e-posta bağlantısı ile oturum açma özelliğini etkinleştirme
Kullanıcıların e-posta bağlantısıyla oturum açması için önce Firebase projeniz için e-posta sağlayıcıyı ve e-posta bağlantısı oturum açma yöntemini etkinleştirmeniz gerekir:
- Firebase konsolunda Auth bölümünü açın.
- Oturum açma yöntemi sekmesinde E-posta/Şifre sağlayıcısını etkinleştirin. E-posta bağlantısıyla oturum açma özelliğini kullanabilmek için e-posta/şifre ile oturum açma özelliğinin etkinleştirilmiş olması gerekir.
- Aynı bölümde, E-posta bağlantısı (şifresiz oturum açma) oturum açma yöntemini etkinleştirin.
- Kaydet'i tıklayın.
Kullanıcının e-posta adresine kimlik doğrulama bağlantısı gönderme
Kimlik doğrulama akışını başlatmak için kullanıcıya e-posta adresini girmesini isteyen bir arayüz gösterin ve ardından sendSignInLinkToEmail
işlevini çağırarak Firebase'ın kimlik doğrulama bağlantısını kullanıcının e-postasına göndermesini isteyin.
Firebase'e e-posta bağlantısının nasıl oluşturulacağına dair talimatlar sağlayan ActionCodeSettings nesnesini oluşturun. Aşağıdaki alanları ayarlayın:
url
: Yerleştirilecek derin bağlantı ve iletilecek ek durum. Bağlantının alanının, Oturum açma yöntemi sekmesine (Kimlik doğrulama -> Oturum açma yöntemi) giderek bulabileceğiniz Firebase Console'daki yetkili alanlar listesinde beyaz listeye eklenmiş olması gerekir. Uygulama cihazında yüklü değilse ve yüklenemediyse bağlantı, kullanıcıyı bu URL'ye yönlendirir.androidPackageName
veiOSBundleId
: Firebase Authentication'nin, Android veya Apple cihazda açılacak yalnızca web bağlantısı mı yoksa mobil bağlantı mı oluşturacağını belirlemesine yardımcı olur.handleCodeInApp
: Doğru olarak ayarlanır. Diğer bant dışı e-posta işlemlerinden (şifre sıfırlama ve e-posta doğrulamaları) farklı olarak, oturum açma işleminin her zaman uygulamada tamamlanması gerekir. Bunun nedeni, akışın sonunda kullanıcının oturum açmış olması ve kimlik doğrulama durumunun uygulamada devam etmesidir.linkDomain
: Bir proje için özel Hosting bağlantı alanları tanımlandığında, bağlantı belirli bir mobil uygulama tarafından açıldığında hangi alanın kullanılacağını belirtin. Aksi takdirde varsayılan alan otomatik olarak seçilir (örneğin, ).PROJECT_ID.firebaseapp.com
dynamicLinkDomain
: Desteği sonlandırıldı. Bu parametreyi belirtmeyin.
Kotlin
val actionCodeSettings = actionCodeSettings { // URL you want to redirect back to. The domain (www.example.com) for this // URL must be whitelisted in the Firebase Console. url = "https://www.example.com/finishSignUp?cartId=1234" // This must be true handleCodeInApp = true setIOSBundleId("com.example.ios") setAndroidPackageName( "com.example.android", true, // installIfNotAvailable "12", // minimumVersion ) }
Java
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() // URL you want to redirect back to. The domain (www.example.com) for this // URL must be whitelisted in the Firebase Console. .setUrl("https://www.example.com/finishSignUp?cartId=1234") // This must be true .setHandleCodeInApp(true) .setIOSBundleId("com.example.ios") .setAndroidPackageName( "com.example.android", true, /* installIfNotAvailable */ "12" /* minimumVersion */) .build();
ActionCodeSettings hakkında daha fazla bilgi edinmek için E-posta İşlemlerinde Durumu İle İlgili Bilgileri Aktarma bölümüne bakın.
Kullanıcıdan e-posta adresini isteyin.
Kimlik doğrulama bağlantısını kullanıcının e-posta adresine gönderin ve kullanıcının e-posta oturumunu aynı cihazda tamamlaması ihtimaline karşı kullanıcının e-posta adresini kaydedin.
Kotlin
Firebase.auth.sendSignInLinkToEmail(email, actionCodeSettings) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); auth.sendSignInLinkToEmail(email, actionCodeSettings) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Email sent."); } } });
E-posta bağlantısıyla oturum açma işlemini tamamlayın
Güvenlikle ilgili sorunlar
Oturum açma bağlantısının, istenmeyen bir kullanıcı olarak veya istenmeyen bir cihazda oturum açmak için kullanılmasını önlemek amacıyla Firebase Authentication, oturum açma akışı tamamlanırken kullanıcının e-posta adresinin sağlanmasını zorunlu kılar. Oturum açmanın başarılı olması için bu e-posta adresinin, oturum açma bağlantısının orijinal olarak gönderildiği adresle eşleşmesi gerekir.
Oturum açma e-postasını gönderirken e-posta adreslerini yerel olarak depolayarak (ör. SharedPreferences'i kullanarak) oturum açma bağlantısını istek gönderdikleri cihazda açan kullanıcılar için bu akışı kolaylaştırabilirsiniz. Ardından, akışı tamamlamak için bu adresi kullanın. Kullanıcının e-posta adresini yönlendirme URL'si parametrelerine iletmeyin ve yeniden kullanmayın. Aksi takdirde oturum ekleme işlemleri etkinleştirilebilir.
Oturum açma işlemi tamamlandıktan sonra, daha önce doğrulanmamış oturum açma mekanizmaları kullanıcıdan kaldırılır ve mevcut oturumlar geçersiz kılınır. Örneğin, daha önce aynı e-posta ve şifreyle doğrulanmamış bir hesap oluşturan bir kullanıcının şifresi, sahiplik iddiasında bulunan ve doğrulanmamış hesabı oluşturan kimliğe bürünen kişinin doğrulanmamış e-posta ve şifreyle tekrar oturum açmasını önlemek için kaldırılır.
Ayrıca, bağlantınızın aracı sunucularca kesilmesi ihtimalini önlemek için üretimde HTTPS URL'si kullandığınızdan emin olun.
Android uygulamasında oturum açma işlemini tamamlama
Firebase Authentication, e-posta bağlantısını mobil cihaza göndermek için Firebase Hosting'u kullanır. Mobil uygulama üzerinden oturum açmanın tamamlanması için uygulamanın, gelen uygulama bağlantısını algılayacak, temel derin bağlantıyı ayrıştıracak ve ardından oturumu tamamlayacak şekilde yapılandırılması gerekir. Daha fazla bilgi için Android Uygulama Bağlantıları belgelerine göz atın.
Firebase Hosting ürününü yapılandır
Firebase Authentication, mobil uygulamada açılması amaçlanan bir bağlantı oluşturup gönderirken Firebase Hosting alanlarını kullanır. Sizin için varsayılan bir Firebase Hosting alanı zaten yapılandırılmıştır.
Firebase Hosting alanlarını yapılandırın:
Firebase konsolunda Barındırma bölümünü açın.
Mobil uygulamalarda açılan e-posta bağlantısı için varsayılan alanı kullanmak istiyorsanız varsayılan sitenize gidin ve varsayılan Hosting alanınızı not edin. Varsayılan Hosting alanı genellikle şu şekilde görünür:
.PROJECT_ID.firebaseapp.com
Uygulamanızı gelen bağlantıyı kesecek şekilde yapılandırırken bu değere ihtiyacınız olacaktır.
E-posta bağlantısı için özel bir alan kullanmak istiyorsanız Firebase Hosting ile bir alan kaydedebilir ve bağlantının alanı olarak bu alanı kullanabilirsiniz.
Android uygulamalarını yapılandırma:
Android uygulamanızdan bu bağlantıları işleyebilmek için uygulamanızın paket adının Firebase konsolu proje ayarlarında belirtilmesi gerekir. Ayrıca, uygulama sertifikasının SHA-1 ve SHA-256 değerlerinin de sağlanması gerekir.
Bu bağlantıların belirli bir etkinliğe yönlendirmesini istiyorsanız
AndroidManifest.xml
dosyanızda bir intent filtresi yapılandırmanız gerekir. Intent filtresi, alanınızın e-posta bağlantılarını yakalar.AndroidManifest.xml
'te:<intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" android:host="<PROJECT_ID>.firebaseapp.com or your custom domain" android:pathPrefix="/__/auth/links" /> </intent-filter>
Kullanıcılar,
/__/auth/links
yolu ve belirttiğiniz şema ve barındırıcıyla bir barındırma bağlantısı açtığında uygulamanız, bağlantıyı işlemek için etkinliği bu intent filtresiyle başlatır.
Bağlantıyı doğrulama ve oturum açma
Yukarıda açıklandığı şekilde bağlantıyı aldıktan sonra, e-posta bağlantısı kimlik doğrulaması için tasarlandığını doğrulayın ve oturumu tamamlayın.
Kotlin
val auth = Firebase.auth val intent = intent val emailLink = intent.data.toString() // Confirm the link is a sign-in with email link. if (auth.isSignInWithEmailLink(emailLink)) { // Retrieve this from wherever you stored it val email = "someemail@domain.com" // The client SDK will parse the code from the link for you. auth.signInWithEmailLink(email, emailLink) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Successfully signed in with email link!") val result = task.result // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error signing in with email link", task.exception) } } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); Intent intent = getIntent(); String emailLink = intent.getData().toString(); // Confirm the link is a sign-in with email link. if (auth.isSignInWithEmailLink(emailLink)) { // Retrieve this from wherever you stored it String email = "someemail@domain.com"; // The client SDK will parse the code from the link for you. auth.signInWithEmailLink(email, emailLink) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "Successfully signed in with email link!"); AuthResult result = task.getResult(); // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error signing in with email link", task.getException()); } } }); }
Apple uygulamalarında e-posta bağlantısıyla oturum açma özelliğini kullanma hakkında daha fazla bilgi edinmek için Apple platformları kılavuzuna bakın.
Web uygulamasında e-posta bağlantısıyla oturum açma özelliğini nasıl kullanacağınızı öğrenmek için Web kılavuzuna bakın.
E-posta bağlantısıyla bağlantı oluşturma/yeniden kimlik doğrulama
Bu kimlik doğrulama yöntemini mevcut bir kullanıcıya da bağlayabilirsiniz. Örneğin, daha önce telefon numarası gibi başka bir sağlayıcıyla kimliğini doğrulayan bir kullanıcı, bu oturum açma yöntemini mevcut hesabına ekleyebilir.
Fark, işlemin ikinci yarısında görülür:
Kotlin
// Construct the email link credential from the current URL. val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink) // Link the credential to the current user. Firebase.auth.currentUser!!.linkWithCredential(credential) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Successfully linked emailLink credential!") val result = task.result // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error linking emailLink credential", task.exception) } }
Java
// Construct the email link credential from the current URL. AuthCredential credential = EmailAuthProvider.getCredentialWithLink(email, emailLink); // Link the credential to the current user. auth.getCurrentUser().linkWithCredential(credential) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "Successfully linked emailLink credential!"); AuthResult result = task.getResult(); // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error linking emailLink credential", task.getException()); } } });
Bu yöntem, hassas bir işlem yapmadan önce e-posta bağlantısı kullanıcısının kimliğini yeniden doğrulamak için de kullanılabilir.
Kotlin
// Construct the email link credential from the current URL. val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink) // Re-authenticate the user with this credential. Firebase.auth.currentUser!!.reauthenticateAndRetrieveData(credential) .addOnCompleteListener { task -> if (task.isSuccessful) { // User is now successfully reauthenticated } else { Log.e(TAG, "Error reauthenticating", task.exception) } }
Java
// Construct the email link credential from the current URL. AuthCredential credential = EmailAuthProvider.getCredentialWithLink(email, emailLink); // Re-authenticate the user with this credential. auth.getCurrentUser().reauthenticateAndRetrieveData(credential) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // User is now successfully reauthenticated } else { Log.e(TAG, "Error reauthenticating", task.getException()); } } });
Ancak akış, orijinal kullanıcının oturum açmadığı farklı bir cihazda sona erebileceğinden bu akış tamamlanamayabilir. Bu durumda, kullanıcıya bağlantıyı aynı cihazda açmaya zorlamak için bir hata gösterilebilir. İşlemin türü ve kullanıcı kimliği hakkında bilgi sağlamak için bağlantıya bazı durum bilgileri iletilebilir.
Desteği sonlandırıldı: Firebase Dynamic Links tabanlı doğrulama
E-posta bağlantısı kimlik doğrulaması daha önce Firebase Dynamic Links'e dayanıyordu. Firebase Dynamic Links, 25 Ağustos 2025'te kapatılacak.
Firebase Authentication Android SDK 23.2.0 ve sonraki sürümler ile Firebase BoM 33.9.0 ve sonraki sürümlerde alternatif bir çözüm yayınladık.
Uygulamanız eski tarz bağlantılar kullanıyorsa uygulamanızı yeni Firebase Hosting tabanlı sisteme taşımanız gerekir.
Desteği sonlandırıldı: E-posta şifresini e-posta bağlantısından ayırt etme
Projenizi 15 Eylül 2023'te veya sonrasında oluşturduysanız e-posta numaralandırma koruması varsayılan olarak etkindir. Bu özellik, projenizin kullanıcı hesaplarının güvenliğini artırır ancak daha önce tanımlayıcı öncelikli akışları uygulamak için önerdiğimiz fetchSignInMethodsForEmail()
yöntemini devre dışı bırakır.
Projeniz için e-posta numaralandırma korumasını devre dışı bırakabilirsiniz ancak bunu yapmamanızı öneririz.
Daha fazla ayrıntı için e-posta numaralandırma koruması ile ilgili dokümanları inceleyin.
Sonraki adımlar
Kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açarken kullandığı kimlik bilgilerine (yani kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.
-
Uygulamalarınızda, kullanıcının temel profil bilgilerini
FirebaseUser
nesnesinden alabilirsiniz. Kullanıcıları Yönet başlıklı makaleyi inceleyin. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();