E-posta Bağlantılarını Kullanarak Firebase ile Kimlik Doğrula

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

  1. Henüz yapmadıysanız Başlangıç kılavuzundaki adımları uygulayın.

  2. Firebase projeniz için E-posta Bağlantısıyla oturum açma özelliğini etkinleştirin.

    Kullanıcıların e-posta bağlantısıyla oturum açmasını sağlamak için önce E-posta sağlayıcıyı etkinleştirmeniz gerekir ve E-posta bağlantısı oturum açma yöntemini kullanıyorsanız:

    1. Firebase konsolunda Auth bölümünü açın.
    2. Oturum açma yöntemi sekmesinde, E-posta/Şifre sağlayıcısını etkinleştirin. E-posta bağlantısını kullanmak için e-posta/şifre ile oturum açmanın etkinleştirilmesi gerektiğini unutmayın oturum açın.
    3. Aynı bölümde, E-posta bağlantısı (şifresiz oturum açma) özelliğini etkinleştirin. oturum açma yöntemini kullanabilirsiniz.
    4. Kaydet'i tıklayın.

Kimlik doğrulama akışını başlatmak için, kullanıcıdan e-posta adresini girmesini isteyen bir arayüz gösterin. Ardından, Firebase'in kimlik doğrulama bağlantısını kullanıcının e-posta adresine göndermesini istemek için sendSignInLinkToEmail() numaralı telefonu arayın.

  1. Firebase'e e-posta bağlantısının nasıl oluşturulacağıyla ilgili talimatları sağlayan ActionCodeSettings nesnesini oluşturun. Aşağıdaki alanları ayarlayın:

    • url: Yerleştirilecek derin bağlantı ve aktarılacak ek durum. Bağlantının alan adı, Firebase Konsolu yetkili alanlar listesinde beyaz listeye eklenmiş olmalıdır. Bu alana, Oturum açma yöntemi sekmesine (Kimlik doğrulama -> Oturum açma yöntemi) gidilerek ulaşabilirsiniz. Uygulama cihazında yüklü değilse ve uygulama yüklenemediyse bağlantı, kullanıcıyı bu URL'ye yönlendirir.

    • androidPackageName ve IOSBundleId: Bir Android veya iOS cihazda oturum açma bağlantısı açıldığında kullanılacak uygulamalar. Firebase Dynamic Links'i mobil uygulamalar üzerinden e-posta işlem bağlantılarını açacak şekilde yapılandırma hakkında daha fazla bilgi edinin.

    • handleCodeInApp: true olarak ayarlandı. Oturum açma işleminin, diğer bant dışı e-posta işlemlerinin (şifre sıfırlama ve e-posta doğrulamaları) aksine her zaman uygulamada tamamlanması gerekir. Bunun nedeni, akışın sonunda kullanıcının oturum açmasının beklendiği ve Yetki durumunun uygulamada devam ediyor olmasıdır.

    • dynamicLinkDomain: Bir proje için birden fazla özel dinamik bağlantı alan adı tanımlandığında, bağlantı belirli bir mobil uygulama aracılığıyla açıldığında hangisinin kullanılacağını belirtin (ör. example.page.link). Aksi takdirde ilk alan otomatik olarak seçilir.

    var acs = 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,
        iOSBundleId: 'com.example.ios',
        androidPackageName: 'com.example.android',
        // installIfNotAvailable
        androidInstallApp: true,
        // minimumVersion
        androidMinimumVersion: '12');
    
  2. Kullanıcıdan e-posta adresini isteyin.

  3. Kimlik doğrulama bağlantısını kullanıcının e-posta adresine gönderin ve kullanıcının e-posta ile oturum açma işlemini aynı cihazda tamamlaması ihtimaline karşı kullanıcının e-postasını kaydedin.

    var emailAuth = 'someemail@domain.com';
    FirebaseAuth.instance.sendSignInLinkToEmail(
            email: emailAuth, actionCodeSettings: acs)
        .catchError((onError) => print('Error sending email verification $onError'))
        .then((value) => print('Successfully sent email verification'));
    });
    

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ı aynı 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 işlem, oturum yerleştirmeyi etkinleştirebilir.

Oturum açma işlemi tamamlandıktan sonra, önceki doğrulanmamış tüm oturum açma yöntemleri 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.

Firebase Authentication, e-posta bağlantısını bir mobil cihaza göndermek için Firebase Dynamic Links'i kullanır. Oturum açma işlemini mobil uygulama üzerinden tamamlamak için uygulamanın, gelen uygulama bağlantısını algılayacak, alttaki derin bağlantıyı ayrıştıracak ve ardından oturum açma işlemini tamamlayacak şekilde yapılandırılması gerekir.

  1. Kılavuzda, Flutter'da Dinamik Bağlantıları alacak şekilde uygulamanızı ayarlayın.

  2. Bağlantı işleyicinizde, bağlantının e-posta bağlantısı kimlik doğrulaması için amaçlanıp amaçlanmadığını kontrol edin ve öyleyse oturum açma işlemini tamamlayın.

    // Confirm the link is a sign-in with email link.
    if (FirebaseAuth.instance.isSignInWithEmailLink(emailLink)) {
      try {
        // The client SDK will parse the code from the link for you.
        final userCredential = await FirebaseAuth.instance
            .signInWithEmailLink(email: emailAuth, emailLink: emailLink);
    
        // You can access the new user via userCredential.user.
        final emailAddress = userCredential.user?.email;
    
        print('Successfully signed in with email link!');
      } catch (error) {
        print('Error signing in with email link.');
      }
    }
    

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:

final authCredential = EmailAuthProvider
    .credentialWithLink(email: emailAuth, emailLink: emailLink.toString());
try {
    await FirebaseAuth.instance.currentUser
        ?.linkWithCredential(authCredential);
} catch (error) {
    print("Error linking emailLink credential.");
}

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.

final authCredential = EmailAuthProvider
    .credentialWithLink(email: emailAuth, emailLink: emailLink.toString());
try {
    await FirebaseAuth.instance.currentUser
        ?.reauthenticateWithCredential(authCredential);
} catch (error) {
    print("Error reauthenticating credential.");
}

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.

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

Bir kullanıcı yeni bir hesap oluşturduktan sonra bu hesap, ve Firebase'deki tüm uygulamalarda bir kullanıcıyı tanımlamak için kullanılabilir. bir web sitesini ziyaret eder.

Uygulamalarınızda, kullanıcıların temel profil bilgilerini şuradan alabilirsiniz: User nesne algılandı. Kullanıcıları Yönetme başlıklı makaleye göz atın.

Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda şunları yapabilirsiniz: oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alın ve aşağıdaki işlemler için kullanın: Kullanıcının hangi verilere erişebileceğini kontrol etmek

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcı kimlik bilgilerini bağlayarak) bir mevcut kullanıcı hesabı.

Bir kullanıcının oturumunu kapatmak için signOut() numaralı telefonu arayın:

await FirebaseAuth.instance.signOut();