Uçtan uca oturum açma akışını gerçekleştirmek için Firebase SDK'sı ile uygulamanıza genel OAuth Girişini entegre ederek kullanıcılarınızın Yahoo gibi OAuth sağlayıcılarını kullanarak Firebase ile kimlik doğrulaması yapmasını sağlayabilirsiniz.
Başlamadan önce
Yahoo hesaplarını kullanarak kullanıcıların oturumunu açmak için öncelikle Yahoo'yu Firebase projeniz için oturum açma sağlayıcısı olarak etkinleştirmeniz gerekir:
- Firebase'i Apple projenize ekleyin.
- Firebase konsolunda Auth bölümünü açın.
- Oturum açma yöntemi sekmesinde Yahoo sağlayıcısını etkinleştirin.
- Söz konusu sağlayıcının geliştirici konsolundan İstemci Kimliği ve İstemci Gizli Anahtarı'nı sağlayıcı yapılandırmasına ekleyin:
-
Yahoo OAuth istemcisi kaydetmek için Yahoo'ya web uygulaması kaydetme konulu Yahoo geliştirici dokümanlarını uygulayın.
Şu iki RFC Connect API iznini seçtiğinizden emin olun:
profile
veemail
. - Bu sağlayıcılara uygulama kaydederken projenizin
*.firebaseapp.com
alanını uygulamanızın yönlendirme alanı olarak kaydettiğinizden emin olun.
-
- Kaydet'i tıklayın.
Oturum açma akışını Firebase SDK'sı ile yönetme
Oturum açma akışını Firebase Apple platformlar SDK'sı ile yönetmek için aşağıdaki adımları uygulayın:
Xcode projenize özel URL şemaları ekleyin:
- Proje yapılandırmanızı açın: Sol ağaç görünümünde proje adını çift tıklayın. HEDEFLER bölümünden uygulamanızı seçin, ardından Bilgi sekmesini seçin ve URL Türleri bölümünü genişletin.
- + düğmesini tıklayın ve Kodlanmış Uygulama Kimliğinizi URL şeması olarak ekleyin. Kodlanmış Uygulama Kimliğinizi, Firebase konsolunun Genel Ayarlar sayfasının iOS uygulamanızın bölümünde bulabilirsiniz. Diğer alanları boş bırakın.
Tamamlandığında yapılandırmanız aşağıdakine benzer bir görünümde olacaktır (ancak uygulamaya özel değerlerinizle):
yahoo.com sağlayıcı kimliğini kullanarak bir OAuthProvider örneği oluşturun.
Swift
var provider = OAuthProvider(providerID: "yahoo.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"yahoo.com"];
İsteğe bağlı: OAuth isteğiyle birlikte göndermek istediğiniz ek özel OAuth parametrelerini belirtin.
Swift
provider.customParameters = [ "prompt": "login", "language": "fr" ]
Objective-C
[provider setCustomParameters:@{@"prompt": @"login", @"language": @"fr"}];
Yahoo'nun desteklediği parametreler için Yahoo OAuth dokümanlarına bakın. Firebase için gerekli parametreleri
setCustomParameters
ile iletemeyeceğinizi unutmayın. Bu parametreler client_id, redirect_uri, response_type, scope ve state parametreleridir.İsteğe bağlı: Kimlik doğrulama sağlayıcısından istemek istediğiniz,
profile
veemail
dışında ek OAuth 2.0 kapsamları belirtin. Uygulamanız Yahoo API'lerinden gizli kullanıcı verilerine erişim gerektiriyorsa Yahoo geliştirici konsolundaki API İzinleri bölümünden Yahoo API'lerine izin istemeniz gerekir. İstenen OAuth kapsamları, uygulamanın API izinlerindeki önceden yapılandırılmış kapsamlarla tam olarak eşleşmelidir. Örneğin, kullanıcı kişilerine okuma/yazma erişimi istenirse ve uygulamanın API izinlerinde önceden yapılandırılmışsa salt okunur OAuth kapsamısdct-r
yerinesdct-w
geçirilmelidir. Aksi takdirde, akış başarısız olur ve son kullanıcıya bir hata gösterilir.Swift
// Request access to Yahoo Mail API. // Request read/write access to user contacts. // This must be preconfigured in the app's API permissions. provider.scopes = ["mail-r", "sdct-w"]
Objective-C
// Request access to Yahoo Mail API. // Request read/write access to user contacts. // This must be preconfigured in the app's API permissions. [provider setScopes:@[@"mail-r", @"sdct-w"]];
Daha fazla bilgi edinmek için Yahoo kapsamları dokümanlarına bakın.
İsteğe bağlı: Uygulamanızın, kullanıcılara reCAPTCHA'yı gösterirken
SFSafariViewController
veyaUIWebView
sunma şeklini özelleştirmek istiyorsanızAuthUIDelegate
protokolüne uygun bir özel sınıf oluşturun ve bunucredentialWithUIDelegate
hizmetine iletin.OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın.
Swift
provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // Yahoo OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Yahoo OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken } } }
Objective-C
[provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // Yahoo OAuth access token can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // Yahoo OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }]; } }];
OAuth erişim jetonunu kullanarak Yahoo API'yi çağırabilirsiniz.
Örneğin, temel profil bilgilerini almak için
Authorization
başlığındaki erişim jetonunu ileterek REST API'yi çağırabilirsiniz:https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
Burada
YAHOO_USER_UID
, Yahoo kullanıcı kimliğidir.Auth.auth.currentUser.providerData[0].uid
alanından veyaauthResult.additionalUserInfo.profile
konumundan alınabilir.Yukarıdaki örnekler oturum açma akışlarına odaklansa da siz de
linkWithPopup
kullanarak bir Yahoo sağlayıcısını mevcut bir kullanıcıya bağlayabilirsiniz. Örneğin, aynı kullanıcıya birden fazla sağlayıcı bağlayabilir ve bu sağlayıcılardan herhangi biriyle oturum açabilir.Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // Yahoo credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // Yahoo OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Yahoo OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // Yahoo credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // Yahoo OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // Yahoo OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
Aynı kalıp, yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgilerini almak amacıyla
reauthenticateWithPopup
/reauthenticateWithRedirect
ile kullanılabilir.Swift
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Yahoo OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // Yahoo OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
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ı bilgisi) bağlanır. Bu yeni hesap Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığından 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 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ı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların, birden fazla kimlik doğrulama sağlayıcı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut:
numaralı telefonu arayı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; }
Kimlik doğrulama hatalarının tamamı için hata işleme kodu eklemek de isteyebilirsiniz. Hataları İşleme bölümüne bakın.