Firebase Authentication'ı kullanarak bir kullanıcıya, oturum açmak için tıklayabileceği bağlantı içeren bir e-posta göndererek oturum açabilirsiniz. Bu işlemde, 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.
- Şifrelerin uygulamalarda yeniden kullanılma riski daha düşüktür. Bu durum, iyi seçilmiş şifrelerin bile güvenliğini tehlikeye atabilir.
- Bir kullanıcının kimliğini doğrularken aynı zamanda kullanıcının bir e-posta adresinin meşru sahibi olduğunu doğrulayabilme.
- Kullanıcının oturum açmak için yalnızca erişilebilir bir e-posta hesabına ihtiyacı vardır. Telefon numarasının veya sosyal medya hesabının sahibi olmanız gerekmez.
- Kullanıcılar, şifre sağlamalarına (veya hatırlamalarına) gerek kalmadan güvenli bir şekilde oturum açabilir. Bu da mobil cihazların çalışmasını zorlaştırabilir.
- Daha önce e-posta tanımlayıcısı (şifre veya birleşik) ile oturum açmış olan mevcut bir kullanıcı, yalnızca e-posta adresiyle oturum açacak şekilde yükseltilebilir. Örneğin, şifresini unutan bir kullanıcı, şifresini sıfırlamaya gerek kalmadan oturum açmaya devam edebilir.
Başlamadan önce
Henüz yapmadıysanız Başlangıç kılavuzundaki adımları uygulayın.
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 Firebase projenizde E-posta sağlayıcı 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çmayı kullanmak için e-posta/şifre ile oturum açma özelliğinin etkinleştirilmesi gerektiğini unutmayın.
- 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 bir kimlik doğrulama bağlantısı gönderin
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.
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 iletilecek 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
veIOSBundleId
: 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 adı 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');
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 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')); });
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 Auth, 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 adresi, oturum açma bağlantısının ilk gönderildiği adresle eşleşmelidir.
Oturum açma bağlantısını istedikleri cihazda açan kullanıcılar için bu akışı, oturum açma e-postası gönderdiğinizde e-posta adreslerini yerel olarak (örneğin, SharedPreferences kullanarak) depolayarak daha verimli hale getirebilirsiniz. Ardından, akışı tamamlamak için bu adresi kullanın. Kullanıcının e-postasını, yönlendirme URL'si parametrelerinde iletmeyin ve yeniden kullanmayın, aksi takdirde oturum yerleştirme etkinleştirilebilir.
Oturum açma işlemi tamamlandıktan sonra, önceki doğrulanmamış tüm 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 adresi ve şifreyle doğrulanmamış bir hesap oluşturulduysa hesabın sahibi olduğunu iddia eden ve bu doğrulanmamış hesabı oluşturan kimliğe bürünen kullanıcını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 ara sunucular tarafından ele geçirilmesini önlemek için üretimde HTTPS URL'si kullandığınızdan emin olun.
E-posta bağlantısını doğrulayın ve oturum açın
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.
Kılavuzda, Flutter'da Dinamik Bağlantıları alacak şekilde uygulamanızı ayarlayın.
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.'); } }
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 başka bir sağlayıcıda (ör. telefon numarası) kimlik doğrulaması yapan bir kullanıcı, 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, hassas bir işlem çalıştırmadan önce e-posta bağlantısı kullanıcısının kimliğini yeniden doğrulamak için de kullanılabilir.
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 giriş yapmadığı farklı bir cihazda tamamlanabileceği için bu akış tamamlanmayabilir. Bu durumda, kullanıcıyı 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ıda bazı durumlar iletilebilir.
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, projenizin kullanıcı hesaplarının güvenliğini artırır ancak önceden tanımlayıcı öncelikli akışları uygulamanızı ö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 bilgi için e-posta numaralandırma koruması ile ilgili dokümanlara bakın.
Sonraki adımlar
Kullanıcı yeni bir hesap oluşturduktan sonra bu hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının kullandığı oturum açma yönteminden bağımsız olarak projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.
Uygulamalarınızda, kullanıcının temel profil bilgilerini User
nesnesinden alabilirsiniz. Kullanıcıları Yönetme başlıklı makaleye göz atın.
Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açan kullanıcının auth
değişkeninden benzersiz kullanıcı kimliğini alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bunu kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini bağlayarak) kullanıcıların mevcut bir kullanıcı hesabına birden fazla kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için signOut()
numaralı telefonu arayın:
await FirebaseAuth.instance.signOut();