Google, Siyah topluluklar için ırksal eşitliği ilerletmeye kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

JavaScript'te E-posta Bağlantısı Kullanarak Firebase ile Kimlik Doğrulama

Bir kullanıcıya oturum açmak için tıklayabilecekleri bir bağlantı içeren bir e-posta göndererek oturum açmak için Firebase Kimlik Doğrulaması'nı kullanabilirsiniz. İşlem sırasında kullanıcının e-posta adresi de doğrulanır.

E-posta ile oturum açmanın sayısız avantajı vardır:

  • Düşük sürtünme kaydı ve oturum açma.
  • İyi seçilmiş şifrelerin güvenliğini zayıflatabilecek uygulamalar arasında daha düşük parola yeniden kullanma riski.
  • Kullanıcının bir e-posta adresinin yasal sahibi olduğunu doğrularken bir kullanıcının kimliğini doğrulama yeteneği.
  • Bir kullanıcının oturum açmak için yalnızca erişilebilir bir e-posta hesabına ihtiyacı vardır. Telefon numarası veya sosyal medya hesabına sahip olmak gerekmez.
  • Bir kullanıcı, bir mobil cihazda hantal olabilecek bir şifre sağlamaya (veya hatırlamaya) gerek kalmadan güvenli bir şekilde oturum açabilir.
  • Daha önce bir e-posta tanımlayıcıyla (şifre veya federasyon) oturum açan mevcut bir kullanıcı yalnızca e-posta ile oturum açacak şekilde yükseltilebilir. Örneğin, parolasını unutmuş bir kullanıcı, parolalarını sıfırlamaya gerek kalmadan oturum açabilir.

Sen başlamadan önce

Henüz yapmadıysanız, başlatma snippet'ini Firebase konsolundan projenize, Firebase'i JavaScript projenize ekleme bölümünde açıklandığı gibi kopyalayın.

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

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

Kimlik doğrulama akışını başlatmak için, kullanıcıya kullanıcıdan e-posta adreslerini vermesini isteyen bir arabirim sendSignInLinkToEmail ve ardından sendSignInLinkToEmail kimlik doğrulama bağlantısını kullanıcının e-postasına göndermesini istemek için sendSignInLinkToEmail arayın.

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

    • url : Yerleştirilecek derin bağlantı ve iletilecek ek durumlar. Bağlantının etki alanının, Oturum Açma yöntemi sekmesine (Kimlik Doğrulama -> Oturum açma yöntemi) giderek bulunabilecek Firebase Konsolu yetkili etki alanları listesinde beyaz listeye eklenmesi gerekir.
    • android ve ios : Oturum açma bağlantısı bir Android veya iOS cihazında açıldığında kullanılacak uygulamalar. Firebase Dinamik Bağlantılarını 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 ayarlayın. Oturum açma işlemi, diğer bant dışı e-posta işlemlerinden (şifre sıfırlama ve e-posta doğrulama) farklı olarak uygulamada her zaman tamamlanmalıdır. Bunun nedeni, akışın sonunda kullanıcının oturum açması beklenir ve uygulama içinde Yetkilendirme durumunun devam etmesi.
    • dynamicLinkDomain : Bir proje için birden fazla özel dinamik bağlantı etki alanı tanımlandığında, bağlantı belirtilen bir mobil uygulama aracılığıyla açılacakken hangisinin kullanılacağını belirtin (örneğin, example.page.link ). Aksi takdirde ilk etki alanı otomatik olarak seçilir.
    
    var 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,
      iOS: {
        bundleId: 'com.example.ios'
      },
      android: {
        packageName: 'com.example.android',
        installApp: true,
        minimumVersion: '12'
      },
      dynamicLinkDomain: 'example.page.link'
    };
    

    ActionCodeSettings hakkında daha fazla bilgi edinmek için, E-posta İşlemleri'ndeki Geçiş Durumu bölümüne bakın.

  2. Kullanıcıdan e-postalarını isteyin.

  3. Kimlik doğrulama bağlantısını kullanıcının e-postasına gönderin ve kullanıcının e-posta oturumunu aynı cihazda tamamlaması durumunda kullanıcının e-postasını kaydedin.

    
    firebase.auth().sendSignInLinkToEmail(email, actionCodeSettings)
      .then(function() {
        // The link was successfully sent. Inform the user.
        // Save the email locally so you don't need to ask the user for it again
        // if they open the link on the same device.
        window.localStorage.setItem('emailForSignIn', email);
      })
      .catch(function(error) {
        // Some error occurred, you can inspect the code: error.code
      });
    

Güvenlik endişeleri

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 için Firebase Auth, oturum açma akışını tamamlarken kullanıcının e-posta adresinin girilmesini gerektirir. 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önderdiğinizde, oturum açma bağlantısını bağlantı istedikleri cihazda açan kullanıcılar için e-posta adreslerini yerel olarak (örneğin, localStorage veya çerezler kullanarak) depolayarak bu akışı düzenleyebilirsiniz. Ardından, akışı tamamlamak için bu adresi kullanın. Kullanıcının e-postasını yönlendirme URL parametrelerine iletmeyin ve yeniden kullanın, çünkü bu oturum enjeksiyonlarını etkinleştirebilir.

Oturum açma tamamlandıktan sonra, daha önce doğrulanmamış oturum açma mekanizması kullanıcıdan kaldırılır ve mevcut oturumlar geçersiz kılınır. Örneğin, bir kullanıcı daha önce aynı e-posta ve şifreyle doğrulanmamış bir hesap oluşturduysa, sahiplik iddia eden ve doğrulanmamış hesabın doğrulanmamış e-posta ve şifreyle tekrar oturum açmasını önlemek için kullanıcının şifresi kaldırılır.

Ayrıca bağlantınızın aracı sunucular tarafından potansiyel olarak ele geçirilmesini önlemek için üretim sırasında bir HTTPS URL'si kullandığınızdan emin olun.

Bir web sayfasında oturum açmayı tamamlama

E-posta bağlantısı derin bağlantısının biçimi, bant dışı e-posta işlemleri (e-posta doğrulaması, şifre sıfırlama ve e-posta değişikliği iptali) için kullanılan biçimle aynıdır. Firebase Auth, bir bağlantının e-posta bağlantısıyla oturum açıp açmadığını kontrol etmek için isSignInWithEmailLink API'sini sağlayarak bu kontrolü kolaylaştırır.

Açılış sayfasında oturum açmayı tamamlamak için, kullanıcının e-postasını ve bir kerelik kodu içeren gerçek e-posta bağlantısını signInWithEmailLink arayın.


// Confirm the link is a sign-in with email link.
if (firebase.auth().isSignInWithEmailLink(window.location.href)) {
  // Additional state parameters can also be passed via URL.
  // This can be used to continue the user's intended action before triggering
  // the sign-in operation.
  // Get the email if available. This should be available if the user completes
  // the flow on the same device where they started it.
  var email = window.localStorage.getItem('emailForSignIn');
  if (!email) {
    // User opened the link on a different device. To prevent session fixation
    // attacks, ask the user to provide the associated email again. For example:
    email = window.prompt('Please provide your email for confirmation');
  }
  // The client SDK will parse the code from the link for you.
  firebase.auth().signInWithEmailLink(email, window.location.href)
    .then(function(result) {
      // Clear email from storage.
      window.localStorage.removeItem('emailForSignIn');
      // You can access the new user via result.user
      // Additional user info profile not available via:
      // result.additionalUserInfo.profile == null
      // You can check if the user is new or existing:
      // result.additionalUserInfo.isNewUser
    })
    .catch(function(error) {
      // Some error occurred, you can inspect the code: error.code
      // Common errors could be invalid email and invalid or expired OTPs.
    });
}

Bir mobil uygulamada oturum açmayı tamamlama

Firebase Kimlik Doğrulaması, e-posta bağlantısını bir mobil cihaza göndermek için Firebase Dinamik Bağlantıları'nı kullanır. Mobil uygulama aracılığıyla oturum açma işlemini tamamlamak için, uygulamanın gelen uygulama bağlantısını algılayacak, temeldeki derin bağlantıyı ayrıştıracak ve ardından web akışı yoluyla yapılan oturum açmayı tamamlayacak şekilde yapılandırılması gerekir.

Bir Android uygulamasında e-posta bağlantısıyla oturum açma işleminin nasıl yapılacağı hakkında daha fazla bilgi için Android kılavuzuna bakın.

Bir iOS uygulamasında oturum açmayı e-posta bağlantısıyla nasıl ele alacağınız hakkında daha fazla bilgi edinmek için iOS kılavuzuna bakın.

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ği doğrulanmış bir kullanıcı bu oturum açma yöntemini mevcut hesaplarına ekleyebilir.

Fark, operasyonun ikinci yarısında olurdu:


// Construct the email link credential from the current URL.
var credential = firebase.auth.EmailAuthProvider.credentialWithLink(
    email, window.location.href);

// Link the credential to the current user.
firebase.auth().currentUser.linkWithCredential(credential)
  .then(function(usercred) {
    // The provider is now successfully linked.
    // The phone user can now sign in with their phone number or email.
  })
  .catch(function(error) {
    // Some error occurred.
  });

Bu, hassas bir işlemi çalıştırmadan önce bir e-posta bağlantısı kullanıcısının yeniden kimliğini doğrulamak için de kullanılabilir.


// Construct the email link credential from the current URL.
var credential = firebase.auth.EmailAuthProvider.credentialWithLink(
    email, window.location.href);

// Re-authenticate the user with this credential.
firebase.auth().currentUser.reauthenticateWithCredential(credential)
  .then(function(usercred) {
    // The user is now successfully re-authenticated and can execute sensitive
    // operations.
  })
  .catch(function(error) {
    // Some error occurred.
  });

Ancak akış, orijinal kullanıcının oturum açmadığı farklı bir cihazda sonuçlanabileceğinden, bu akış tamamlanmayabilir. Bu durumda, kullanıcıya aynı cihazdaki bağlantıyı 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ı durumlar iletilebilir.

Hem parola hem de bağlantı tabanlı oturum açmayı e-posta ile desteklemeniz durumunda, parola / bağlantı kullanıcısı için oturum açma yöntemini farklılaştırmak için fetchSignInMethodsForEmail kullanın. Bu, kullanıcıdan önce e-postalarını vermesinin istendiği ve daha sonra oturum açma yönteminin sunulduğu ilk tanımlayıcı akışları için kullanışlıdır:

// After asking the user for their email.
var email = window.prompt('Please provide your email');
firebase.auth().fetchSignInMethodsForEmail(email)
  .then(function(signInMethods) {
    // This returns the same array as fetchProvidersForEmail but for email
    // provider identified by 'password' string, signInMethods would contain 2
    // different strings:
    // 'emailLink' if the user previously signed in with an email/link
    // 'password' if the user has a password.
    // A user could have both.
    if (signInMethods.indexOf(
            firebase.auth.EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD) != -1) {
      // User can sign in with email/password.
    }
     if (signInMethods.indexOf(
             firebase.auth.EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD) != -1) {
       // User can sign in with email/link.
    }
  })
  .catch(function(error) {
    // Some error occurred, you can inspect the code: error.code
  });
}

Yukarıda açıklandığı gibi, e-posta / şifre ve e-posta / bağlantı, farklı oturum açma yöntemleriyle aynı firebase.auth.EmailAuthProvider (aynı PROVIDER_ID ) olarak kabul edilir.

Sonraki adımlar

Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kimlik bilgileriyle (yani kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcısı bilgileri) oturum açan kullanıcı ile bağlantılandırılır. Bu yeni hesap Firebase projenizin bir parçası olarak saklanır ve kullanıcının nasıl oturum açtığından bağımsız olarak projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda, kullanıcılarınızın kimlik doğrulama durumunu bilmenin önerilen yolu, Auth nesnesinde bir gözlemci ayarlamaktır. Daha sonra kullanıcının temel profil bilgilerini User nesnesinden alabilirsiniz. Bkz. Kullanıcıları Yönetme .

  • Firebase Gerçek Zamanlı Veritabanınızda ve Bulut Depolama Güvenliği Kurallarınızda , oturum auth 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ısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcısı kullanarak oturum açmasına izin verebilirsiniz .

Bir kullanıcının oturumunu kapatmak için signOut arayın:

firebase.auth().signOut().then(function() {
  // Sign-out successful.
}).catch(function(error) {
  // An error happened.
});