Firebase Authentication'ı kullanarak bir kullanıcıya e-posta göndererek oturum açabilirsiniz oturum açmak için tıklayabilecekleri bir bağlantı içeren, 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
Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.
- Xcode'da, uygulama projeniz açıkken Dosya > Paket Ekle'yi tıklayın.
- İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
- Firebase Authentication kitaplığını seçin.
-ObjC
işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.- İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlar.
https://github.com/firebase/firebase-ios-sdk.git
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 şunu açın: Kimlik Doğrulama bölümüne bakı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'i istemek için sendSignInLink
Kimlik doğrulama bağlantısını kullanıcının e-postasına gönderin.
Firebase'e sağlamak için
ActionCodeSettings
nesnesini oluşturun. E-posta bağlantısının nasıl oluşturulacağıyla ilgili talimatlar. Aşağıdaki alanları ayarlayın:- url: Yerleştirilecek derin bağlantı ve iletilecek ek durumlar. 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).
- iOSBundleID ve androidPackageName : Oturum açma bağlantısı sırasında kullanılacak uygulamalar Android veya Apple cihazda 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.
- HandCodeInApp: True olarak 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.
Swift
let actionCodeSettings = ActionCodeSettings() actionCodeSettings.url = URL(string: "https://www.example.com") // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = true actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable: false, minimumVersion: "12")
Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; [actionCodeSettings setURL:[NSURL URLWithString:@"https://www.example.com"]]; // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = YES; [actionCodeSettings setIOSBundleID:[[NSBundle mainBundle] bundleIdentifier]]; [actionCodeSettings setAndroidPackageName:@"com.example.android" installIfNotAvailable:NO minimumVersion:@"12"];
ActionCodeSettings hakkında daha fazla bilgi edinmek için E-posta İşlemlerinde İletim Durumu 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-postasını kaydedin Kullanıcı, e-postayla oturum açma işlemini aynı cihazda tamamlamalıdır.
Swift
Auth.auth().sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { error in // ... if let error = error { self.showMessagePrompt(error.localizedDescription) return } // 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. UserDefaults.standard.set(email, forKey: "Email") self.showMessagePrompt("Check your email for link") // ... }
Objective-C
[[FIRAuth auth] sendSignInLinkToEmail:email actionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { // ... if (error) { [self showMessagePrompt:error.localizedDescription]; return; } // 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. [NSUserDefaults.standardUserDefaults setObject:email forKey:@"Email"]; [self showMessagePrompt:@"Check your email for link"]; // ... }];
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ı aynı bağlantı istediğinde e-posta adresini yerel olarak depolayarak oturum açma e-postasını gönderin. Ardından, akışı tamamlamak için bu adresi kullanın.
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 aynı alan adıyla doğrulanmamış bir hesap 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: aynı hesapla tekrar oturum açmayı deneyin.
Oturum açma işlemini Apple mobil uygulamasında 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 yapmak için özelliği yoksa, 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.
Apple uygulamalarını yapılandırma:
- Uygulamanızdan bu bağlantıları işlemeyi planlıyorsanız paket kimliğinin Firebase Konsolu'nda belirtilmesi gerekiyor iyi bir fırsattır. Buna ek olarak, App Store Kimliği ve Apple Developer Ekip kimliğinin de belirtilmesi gerekir.
- Ayrıca, e-posta işlem işleyici alan adınızı
Uygulama özelliklerinizde ilişkili alan. Varsayılan olarak
e-posta işlem işleyicisi, aşağıdaki örnektekine benzer bir alan adında barındırılır:
APP_ID.firebaseapp.com
- Uygulamanızı iOS 8 ve daha eski sürümlere dağıtmayı planlıyorsanız paket kimliğinizi, gelen istek için özel bir şema olarak ayarlamanız gerekir URL'ler.
- Bu konuyla ilgili daha fazla bilgi için Apple platformu 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.
Swift
if Auth.auth().isSignIn(withEmailLink: link) { Auth.auth().signIn(withEmail: email, link: self.link) { user, error in // ... } }
Objective-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
Android cihazlarda e-posta bağlantısıyla oturum açma işlemini nasıl yapacağınızı öğrenmek için Android 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:
Swift
let credential = EmailAuthCredential.credential(withEmail:email link:link) Auth.auth().currentUser?.link(with: credential) { authData, error in if (error) { // And error occurred during linking. return } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthProvider credentialWithEmail:email link:link]; [FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during linking. return; } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }];
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.
Swift
let credential = EmailAuthProvider.credential(withEmail:email link:link) Auth.auth().currentUser?.reauthenticate(with: credential) { authData, error in if (error) { // And error occurred during re-authentication. return } // The user was successfully re-authenticated. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthCredential credentialWithEmail:email link:link]; [FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during re-authentication return; } // The user was successfully re-authenticated. }];
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:
User
nesnesini tanımlayın. Kullanıcıları Yönetme başlıklı makaleye göz atın. 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:
değerleridir.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Ayrıca tüm kimlik doğrulama aralığı için hata işleme kodu da ekleyebilirsiniz. hatalar. Hataları İşleme bölümüne bakın.