Firebase Authentication'ı kullanarak bir kullanıcıya e-posta göndererek oturum açabilirsiniz oturum açmak için tıklayabilecekleri bir bağlantı yer alır. Bu süreçte kullanıcının e-posta adresi de doğrulanır.
E-posta ile oturum açmanın pek çok avantajı vardır:
- Kayıt ve oturum açma işlemlerini kolaylaştırın.
- Uygulamalarda şifrelerin yeniden kullanılması ihtimali daha düşüktür ve bu da güvenliği olumsuz etkileyebilir. doğru şekilde seçilmiş şifreler oluşturabilirsiniz.
- Bir kullanıcının kimliğini doğrularken aynı zamanda kullanıcının bir e-posta adresinin yasal sahibidir.
- Kullanıcının oturum açmak için yalnızca erişilebilir bir e-posta hesabına ihtiyacı vardır. Hiçbir sahipliği yoksa telefon numarası veya sosyal medya hesabı gereklidir.
- Kullanıcı, herhangi bir güvenlik onayı sağlamadan (veya hatırlamadan) Bu da mobil cihazlarda kullanışsız olabilir.
- Daha önce bir e-posta tanımlayıcısı (şifre) ile oturum açmış mevcut bir kullanıcı veya birleşik) yalnızca e-posta ile oturum açacak şekilde yükseltilebilir. Örneğin, şifresini unutan bir kullanıcı tekrar oturum açmaya gerek kalmadan oturum açabilir. şifresini sıfırlayabilir.
Başlamadan önce
Android projenizi oluşturun
Henüz yapmadıysanız Firebase'i Android projenize ekleyin.
Modül (uygulama düzeyinde) Gradle dosyanızda (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
), Android için Firebase Authentication kitaplığına bağımlılığı ekleyin. Şunu kullanmanızı öneririz: Firebase Android BoM Kitaplık'ta sürüm oluşturmayı kontrol etmek içinAyrıca, Firebase Authentication kurulumunun bir parçası olarak Google Play Hizmetleri SDK'sını uygulamanıza ekleyin.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.4.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.2.0") }Firebase Android BoM kullanıldığında, Uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanacaktır.
(Alternatif) Firebase kitaplığı bağımlılıklarını kullanmadanBoM
Firebase BoM kullanmamayı seçerseniz her Firebase kitaplığı sürümünü belirtmeniz gerekir değerini alır.
Uygulamanızda birden çok Firebase kitaplığı kullanıyorsanız, kitaplık sürümlerini yönetmek için BoM kullanmanızı öneririz. Bu, tüm sürümlerin uyumlu olduğundan emin olun.
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.0.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }
Firebase projeniz için E-posta Bağlantısıyla oturum açma özelliğini etkinleştirme
Kullanıcıların e-posta bağlantısıyla oturum açmasını sağlamak için önce E-posta sağlayıcısını etkinleştirmeniz ve Firebase projeniz için e-posta bağlantısı oturum açma yöntemi:
- 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. Not e-posta bağlantısıyla oturum açmayı kullanmak için e-posta/şifre oturum açma etkinleştirilmelidir.
- Aynı bölümde, E-posta bağlantısı (şifresiz oturum açma) oturum açmayı etkinleştirin. yöntemidir.
- Kaydet'i tıklayın.
Kullanıcının e-posta adresine bir kimlik doğrulama bağlantısı gönderin
Kimlik doğrulama akışını başlatmak için kullanıcıya
kullanıcıdan e-posta adresini girmesini ve ardından telefonla aramasını ister
Firebase'in kimlik doğrulama bağlantısını şu adrese göndermesini istemek için sendSignInLinkToEmail
Kullanıcının e-postası.
ActionCodeSettings oluşturma örneği oluşturun. Bu nesne, Firebase'e e-posta bağlantısı. Aşağıdaki alanları ayarlayın:
url
: Yerleştirilecek derin bağlantı ve iletilecek ek durum. Bağlantının alanı, Firebase Konsolu'nun Yetkili alan adları (Oturum açma yöntemi sekmesine gidilerek bulunabilir) (Kimlik doğrulama -> Oturum açma yöntemi). Bağlantı, kullanıcıyı şuraya yönlendirir: Bu URL'yi kullanarak uygulama cihazlarında yüklü değilse ve yüklenebilir.androidPackageName
veIOSBundleId
: Oturum açarken kullanılacak uygulamalar Android veya Apple cihazda bağlantı açıldığından emin olun. Şu işlemler hakkında daha fazla bilgi edinin: Firebase Dynamic Links'i yapılandırın e-posta işlemi bağlantılarını mobil uygulamalar aracılığıyla açmak için.handleCodeInApp
: Doğru değerine ayarlanır. Oturum açma işlemi her zaman uygulamada tamamlanması, diğer bant dışı e-posta işlemlerinin (şifre) sıfırlama ve e-posta doğrulamaları). Bunun nedeni, akışın sonunda kullanıcıların Kullanıcının oturum açmış olması beklenir ve Yetki durumu şu süre içinde devam eder: görebilirsiniz.dynamicLinkDomain
: Birden fazla özel dinamik bağlantı alan adı tanımlandığında bağlantı şununla açılacağında hangisinin kullanılacağını belirtin: Belirli bir mobil uygulama (örneğin,example.page.link
). Aksi halde ilk alan adı otomatik olarak seçilir.
Kotlin+KTX
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 İletim Durumu bölümüne ekleyin.
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-postasını kaydedin Kullanıcı, e-postayla oturum açma işlemini aynı cihazda tamamlamalıdır.
Kotlin+KTX
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 kullanıcı olarak veya istenmeyen bir cihazdaysa Firebase Auth, kullanıcının e-posta adresinin ne zaman sağlandığını göreceğiz. Oturum açma işleminin başarılı olması için bu e-posta adresi, oturum açma bağlantısının gönderildiği adresle eşleşmelidir.
Oturum açma bağlantısını e-posta adresini yerel olarak saklayarak bağlantı isteğinde bulunurlar. (oturum açma e-postasını gönderdiğinizde), SharedPreferences'ı kullanarak Ardından, akışı tamamlamak için bu adresi kullanın. Kullanıcının e-postasını, yönlendirme URL'si parametrelerinde iletmeyin ve bu URL'yi Bu işlem, oturum yerleştirmeyi etkinleştirebilir.
Oturum açma işlemi tamamlandıktan sonra, önceki doğrulanmamış tüm oturum açma mekanizmaları kaldırılır ve mevcut tüm oturumlar geçersiz kılınır. Örneğin, bir kullanıcı daha önce veya e-posta adresini ve şifreyi çıkardıktan sonra, kullanıcının şifresi hesabın sahibi olduğunu iddia eden ve bu doğrulanmamış hesabı oluşturan kişinin kimliğine bürünen: doğrulanmamış e-posta ve şifreyle tekrar oturum açmayı deneyin.
Ayrıca bağlantınızın olmasını önlemek için üretimde HTTPS URL'si kullandığınızdan emin olun engellenebilir.
Bir Android uygulamasında oturum açma işlemini tamamlama
Firebase Authentication, e-posta bağlantısını bir mobil cihaz Oturum açma işlemini mobil uygulama aracılığıyla tamamlamak için gelen uygulama bağlantısını algılayacak şekilde yapılandırılması gerekir; altındaki derin bağlantıyı tıklayın ve ardından oturum açma işlemini tamamlayın.
Firebase Dynamic Links'i yapılandırma
Firebase Auth, bir mobil uygulamada açılması amaçlanan bağlantıdır. Bunu kullanmak için özelliği için, Firebase Konsolu'nda Dynamic Links'in yapılandırılması gerekir.
Firebase Dynamic Links'i etkinleştirin:
- Firebase konsolunda Dynamic Links bölümünü açın.
-
Dynamic Links şartlarını henüz kabul etmediyseniz ve Dynamic Links oluşturduysanız kullanıyorsanız bunu hemen yapın.
Daha önce Dynamic Links alanı oluşturduysanız bunu not edin. Dynamic Links alan genellikle aşağıdaki örnekteki gibi görünür:
example.page.link
Apple veya Android uygulamanızı aşağıdaki amaçlarla yapılandırırken bu değere ihtiyacınız olacaktır: izlemesi için bir istek oluşturur.
Android uygulamalarını yapılandırma:
- Android uygulamanızdan bu bağlantıları işleyebilmek için Android paket adının Firebase Konsolu'nda belirtilmesi gerekir iyi bir fırsattır. Ek olarak, uygulamanın SHA-1 ve SHA-256 sağlayabilirsiniz.
- Dinamik bağlantı alan adı eklediğinize ve Android uygulaması doğru şekilde yapılandırıldığında, dinamik bağlantı şuraya yönlendirir: başlayarak uygulamanız gerekir.
- Dinamik bağlantının belirli bir etkinliğe yönlendirmesini istiyorsanız
AndroidManifest.xml dosyanızda bir intent filtresi yapılandırmanız gerekir.
dosyası olarak kaydedebilirsiniz. Bu, dinamik bağlantı alan adınızı belirterek veya
intent filtresindeki e-posta işlem işleyicisi ile değiştirebilirsiniz. Varsayılan olarak, e-posta
işlem işleyici aşağıdaki örnektekine benzer bir alan adında barındırılır:
PROJECT_ID.firebaseapp.com/
- Uyarılar:
- intent filtresine dokunun.
- Dinamik bağlantı alan adınızı oluştururken
Kısa URL bağlantısı. Bu kısa URL aktarılmayacak; yapmayın
intent filtrenizi bir
android:pathPrefix
özelliği. Bu durumda Google Analytics'in farklı kısımlarındaki farklı dinamik bağlantıları en iyi yoludur. Ancakmode
sorgu parametresini kontrol edebilirsiniz. hangi işlemin gerçekleştirilmeye çalıştığını görmek için bağlantıyı olup olmadığını görmek içinisSignInWithEmailLink
gibi SDK yöntemlerini kullanın uygulamanızın aldığı bir bağlantı, istediğiniz şeyi yapar.
- Dinamik bağlantı alma hakkında daha fazla bilgi için Android Dynamic Links ile ilgili talimatları alma.
Bağlantıyı doğrula ve oturum aç
Yukarıda açıklandığı şekilde bağlantıyı aldıktan sonra bağlantının e-posta için olduğunu doğrulayın bağlantı kimlik doğrulamasını kullanın ve oturum açma işlemini tamamlayın.
Kotlin+KTX
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'da e-posta bağlantısıyla oturum açma işleminin nasıl yapılacağı hakkında daha fazla bilgi Apple platformları kılavuzuna bakın.
Web'de e-posta bağlantısıyla oturum açma işleminin nasıl yapılacağını öğrenmek için Web rehberine 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: Kullanıcının kimliği daha önce başka bir sağlayıcıda (ör. telefon numarası) doğrulandığında bu oturum açma yöntemini mevcut hesabına ekleyebilir.
Fark, işlemin ikinci yarısında olacaktır:
Kotlin+KTX
// 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, bir e-posta bağlantısı kullanıcısının kimliğini yeniden doğrulamak için de kullanılabilir. hassas bir işlemdir.
Kotlin+KTX
// 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ış, asıl kullanıcının çalıştığı farklı bir cihazda sona erebileceği için giriş yapılmadı, bu akış tamamlanmayabilir. Bu durumda, bir hata bağlantıyı aynı cihazda açmaya zorlamak için kullanıcıya gösterilir. Biraz durum bilgisi sağlamak için bağlantıda iletilebilir. ve kullanıcı kimliği.
Kullanımdan kaldırıldı: E-posta şifresi ile e-posta bağlantısı ayrılıyor
Projenizi 15 Eylül 2023'te veya sonrasında oluşturduysanız e-posta numaralandırma
koruması varsayılan olarak etkindir. Bu özellik, hesabınızın güvenliğini
projenin kullanıcı hesaplarına uygulanır, ancak fetchSignInMethodsForEmail()
devre dışı bırakılır
yöntemini kullanmayı tercih ettik.
Projeniz için e-posta numaralandırma korumasını devre dışı bırakabilirsiniz ancak kullanmanızı önermeyiz.
E-posta numaralandırma koruması ile ilgili dokümanlara göz atın inceleyebilirsiniz.
Sonraki adımlar
Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.
-
Uygulamalarınızda, kullanıcıların temel profil bilgilerini şuradan alabilirsiniz:
FirebaseUser
nesnesini ifade eder. Bkz. Kullanıcıları Yönet. Firebase Realtime Database ve Cloud Storage içinde Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz:
auth
değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.
Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.
Bir kullanıcının oturumunu kapatmak için numaralı telefonu arayın
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();