Kullanıcıya oturum açmak için tıklayabileceği bir bağlantı içeren e-posta göndererek oturum açmasını sağlamak için Firebase Authentication'ı kullanabilirsiniz. Bu işlem sırasında kullanıcının e-posta adresi de doğrulanır.
E-posta ile oturum açmanın birçok avantajı vardır:
- Kolay kayıt ve oturum açma.
- Uygulamalarda şifrelerin yeniden kullanılması riskini azaltır. Bu durum, iyi seçilmiş şifrelerin bile güvenliğini zayıflatabilir.
- Kullanıcıyı kimlik doğrulamak ve aynı zamanda kullanıcının bir e-posta adresinin yasal sahibi olduğunu doğrulamak.
- Kullanıcıların oturum açmak için erişilebilir bir e-posta hesabı olması yeterlidir. Telefon numarası veya sosyal medya hesabı sahibi olmanız gerekmez.
- Kullanıcılar, mobil cihazda zahmetli olabilecek bir şifre girmeden (veya şifreyi hatırlamadan) güvenli bir şekilde oturum açabilir.
- Daha önce bir e-posta tanımlayıcısı (şifre veya federasyon) ile oturum açmış mevcut bir kullanıcı, yalnızca e-posta ile oturum açacak şekilde yükseltilebilir. Örneğin, şifresini unutan bir kullanıcı, şifresini sıfırlamasına gerek kalmadan oturum açabilir.
Başlamadan önce
Firebase bağımlılarını yükleyip yönetmek için Swift Package Manager'ı kullanın.
- Xcode'da, uygulamanız açıkken File > Add Packages (Dosya > Paket Ekle) seçeneğine gidin.
- İstendiğinde Firebase Apple platformları SDK deposunu ekleyin:
- Firebase Authentication kitaplığını seçin.
-ObjC
işaretini hedefinizin derleme ayarlarının Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne ekleyin.- İşlem tamamlandığında Xcode otomatik olarak arka planda bağımlılarınızı çözümlemeye ve indirmeye başlar.
https://github.com/firebase/firebase-ios-sdk.git
Firebase projeniz için e-posta bağlantısı ile giriş özelliğini etkinleştirme
Kullanıcıların e-posta bağlantısıyla oturum açmasını sağlamak için öncelikle Firebase projenizde e-posta sağlayıcısını ve e-posta bağlantısıyla 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çma özelliğini kullanmak için e-posta/şifreyle 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ıya e-posta adresini girmesini isteyen bir arayüz gösterin ve ardından sendSignInLink
işlevini çağırarak Firebase'den kimlik doğrulama bağlantısını kullanıcının e-posta adresine göndermesini isteyin.
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 Console'daki yetkili alanlar listesinde beyaz listeye eklenmelidir. Bu listeye, Oturum açma yöntemi sekmesine (Kimlik doğrulama -> Oturum açma yöntemi) giderek ulaşabilirsiniz.
iOSBundleID
veandroidPackageName
: Firebase Authentication'ın, yalnızca web'de kullanılabilen veya Android ya da Apple cihazda açılan bir mobil bağlantı oluşturup oluşturmaması gerektiğini belirlemesine yardımcı olur.handleCodeInApp
: Doğru olarak ayarlayın. Oturum açma işlemi, diğer bant dışı e-posta işlemlerinden (şifre sıfırlama ve e-posta doğrulamaları) farklı olarak her zaman uygulamada tamamlanmalıdır. Bunun nedeni, akışın sonunda kullanıcının oturum açmış olması ve kimlik doğrulama durumunun uygulamada kalıcı hale getirilmesidir.linkDomain
: Bir proje için özel Hosting bağlantı alanları tanımlandığında, bağlantının belirli bir mobil uygulama tarafından açılacağı durumlarda hangi alanın kullanılacağını belirtin. Aksi takdirde varsayılan alan otomatik olarak seçilir (örneğin, ).PROJECT_ID.firebaseapp.com
dynamicLinkDomain
: Kullanımdan kaldırıldı. Bu parametreyi belirtmeyin.
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 Durum Geçirme 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-posta ile oturum açma işlemini aynı cihazda tamamlaması ihtimaline karşı kullanıcının e-posta adresini kaydedin.
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 tamamlama
Güvenlikle ilgili endişeler
Oturum açma bağlantısının, oturum açma akışı tamamlanırken kullanıcının e-posta adresinin sağlanmasını zorunlu kılarak istenmeyen bir kullanıcı olarak veya istenmeyen bir cihazda oturum açmak için kullanılmasını önler. Oturum açma işleminin başarılı olması için bu e-posta adresinin, oturum açma bağlantısının ilk gönderildiği adresle eşleşmesi gerekir.
Oturum açma e-postasını gönderdiğinizde e-posta adreslerini yerel olarak depolayarak, oturum açma bağlantısını istedikleri cihazda açan kullanıcılar için bu akışı kolaylaştırabilirsiniz. Ardından, akışı tamamlamak için bu adresi kullanın.
Oturum açma işlemi tamamlandıktan sonra, daha önce doğrulanmamış 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 sahipliği iddia eden ve doğrulanmamış hesabı oluşturan kişinin aynı hesapla tekrar oturum açmasını önlemek için kullanıcının şifresi kaldırılır.
Oturum açma işlemini bir Apple mobil uygulamasında tamamlama
Firebase Authentication, e-posta bağlantısını bir mobil cihaza göndermek için Firebase Hosting kullanır. Mobil uygulamayla oturum açma işleminin tamamlanması için uygulamanın gelen uygulama bağlantısını algılayacak, temel derin bağlantıyı ayrıştıracak ve ardından oturum açma işlemini tamamlayacak şekilde yapılandırılması gerekir. Bunu nasıl yapacağınızla ilgili daha fazla bilgi için iOS'te evrensel bağlantılar ve ilişkili alan adları başlıklı makaleye göz atın.
Firebase Hosting ürününü yapılandır
Firebase Authentication, mobil uygulamada açılması amaçlanan bir bağlantı oluşturup gönderirken Firebase Hosting alanlarını kullanır. Sizin için varsayılan bir Firebase Hosting alanı zaten yapılandırılmış.
Firebase Hosting alan adını yapılandırın:
Firebase konsolunda Hosting (Barındırma) bölümünü açın.
Mobil uygulamalarda açılan e-posta bağlantısı için varsayılan alanı kullanmak istiyorsanız varsayılan sitenize gidip varsayılan Hosting alanınızı not edin. Varsayılan Hosting alanı genellikle şu şekilde görünür:
.PROJECT_ID.firebaseapp.com
Uygulamanızı gelen bağlantıyı yakalayacak şekilde yapılandırırken bu değere ihtiyacınız olacaktır.
E-posta bağlantısı için özel alan kullanmak istiyorsanız Firebase Hosting ile bir alan adı kaydedebilir ve bağlantının alan adı olarak bu alanı kullanabilirsiniz.
Apple uygulamalarını yapılandırma:
Seçilen alanı uygulama bağlantıları için ilişkilendirilmiş alan olarak yapılandırmanız gerekir. Hakları uygulamanızda ayarlamak için Xcode'da hedefinizin Signing & Capabilities (İmzalama ve Yetenekler) sekmesini açın ve önceki adımda Firebase Hosting alanlarını Associated Domains (İlişkili Alanlar) özelliğine ekleyin. Varsayılan Firebase Hosting alanını kullanıyorsanız bu
olur.applinks:PROJECT_ID.firebaseapp.com
Daha fazla bilgi için Apple'ın doküman sitesindeki İlişkili alanları destekleme başlıklı makaleyi inceleyin.
Bağlantıyı doğrulama ve oturum açma
Bağlantıyı yukarıda açıklandığı şekilde aldıktan sonra, bağlantının e-posta bağlantısı kimlik doğrulaması için olduğunu doğrulayı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 uygulamasında e-posta bağlantısıyla oturum açma işlemini nasıl yapacağınız hakkında bilgi edinmek için Android kılavuzuna bakın.
Bir web uygulamasında e-posta bağlantısıyla oturum açma işleminin nasıl yapılacağı hakkında bilgi edinmek için Web kılavuzu'na bakın.
E-posta bağlantısıyla bağlama/yeniden kimlik doğrulama
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 kimlik doğrulaması yapmış bir kullanıcı, bu oturum açma yöntemini mevcut hesabına ekleyebilir.
Aradaki fark, işlemin ikinci yarısında olur:
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 özellik, 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.
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ış, orijinal kullanıcının oturum açmadığı farklı bir cihazda sona erebileceğinden bu akış tamamlanmayabilir. Bu durumda, kullanıcıyı bağlantıyı aynı cihazda açmaya zorlamak için bir hata gösterilebilir. İşlem türü ve kullanıcı kimliği hakkında bilgi sağlamak için bağlantıya bazı durumlar eklenebilir.
Kullanımdan kaldırıldı: Firebase Dynamic Links tabanlı doğrulama
Firebase Authentication iOS SDK'sı v11.8.0'dan önce e-posta bağlantısıyla oturum açma özelliği oturum açma bağlantılarını doğru uygulamada açmak için Firebase Dynamic Links'a dayanıyordu. Firebase Dynamic Links 25 Ağustos 2025'te kapatılacağından bu doğrulama bağlantıları kullanımdan kaldırıldı.
Uygulamanız eski stil bağlantıları kullanıyorsa uygulamanızı yeni Firebase Hosting tabanlı sisteme taşımanız gerekir.
Kullanımdan kaldırıldı: E-posta bağlantısı ile e-posta şifresi arasındaki fark
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 kimlik öncelikli akışları uygulamak için daha önce ö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ırması korumasını etkinleştirme veya devre dışı bırakma başlıklı makaleyi inceleyin.
Sonraki adımlar
Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın 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ı makaleyi inceleyin. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış 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 bu kimliği kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut:
işlevini çağırın.
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, kimlik doğrulama hatalarının tamamı için hata işleme kodu eklemek de isteyebilirsiniz. Hataları İşleme bölümüne bakın.