Możesz umożliwić użytkownikom uwierzytelnianie w Firebase za pomocą dostawców OAuth, takich jak Yahoo, integrując w aplikacji ogólne logowanie OAuth za pomocą pakietu SDK Firebase, aby przeprowadzić pełny proces logowania.
Zanim zaczniesz
Aby logować użytkowników za pomocą kont Yahoo, musisz najpierw włączyć Yahoo jako dostawcę logowania w projekcie Firebase:
- Dodaj Firebase do projektu Apple.
- W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę logowania Yahoo.
-
Dodaj identyfikator klienta i tajny klucz klienta z konsoli deweloperskiej tego dostawcy do konfiguracji dostawcy:
-
Aby zarejestrować klienta OAuth Yahoo, postępuj zgodnie z dokumentacją dla deweloperów Yahoo dotyczącą rejestrowania aplikacji internetowej w Yahoo.
Wybierz 2 uprawnienia interfejsu OpenID Connect API:
profileiemail. -
Podczas rejestrowania aplikacji u tych dostawców pamiętaj, aby zarejestrować domenę
*.firebaseapp.comprojektu jako domenę przekierowania aplikacji.
-
- Kliknij Zapisz.
Obsługa procesu logowania za pomocą pakietu SDK Firebase
Aby obsłużyć proces logowania za pomocą pakietu Firebase SDK na platformy Apple, wykonaj te czynności:
Dodaj niestandardowe schematy URL do projektu w Xcode:
- Otwórz konfigurację projektu: w widoku drzewa po lewej stronie kliknij dwukrotnie nazwę projektu. W sekcji MIEJSCA DOCELOWE wybierz aplikację, a następnie kliknij kartę Informacje i rozwiń sekcję Typy adresów URL.
-
Kliknij przycisk + i dodaj zakodowany identyfikator aplikacji jako schemat URI adresu URL.
Pozostałe pola pozostaw puste.
Zakodowany identyfikator aplikacji znajdziesz w Firebase konsoli: otwórz
Ustawienia > kartę Ogólne, a następnie przewiń w dół do sekcji Twoje aplikacje, aby wyświetlić szczegóły aplikacji na iOS.Po zakończeniu konfiguracja powinna wyglądać podobnie do poniższej (ale z wartościami specyficznymi dla Twojej aplikacji):
Utwórz instancję OAuthProvider, używając identyfikatora dostawcy yahoo.com.
Swift
var provider = OAuthProvider(providerID: "yahoo.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"yahoo.com"];
Opcjonalnie: określ dodatkowe parametry niestandardowe protokołu OAuth, które chcesz wysłać wraz z żądaniem OAuth.
Swift
provider.customParameters = [ "prompt": "login", "language": "fr" ]
Objective-C
[provider setCustomParameters:@{@"prompt": @"login", @"language": @"fr"}];
Parametry obsługiwane przez Yahoo znajdziesz w dokumentacji protokołu OAuth od Yahoo. Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą znaku
setCustomParameters. Są to parametry client_id, redirect_uri, response_type, scope i state.Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza
profileiemail, które chcesz przesłać do dostawcy uwierzytelniania. Jeśli Twoja aplikacja wymaga dostępu do prywatnych danych użytkowników z interfejsów API Yahoo, musisz poprosić o uprawnienia do interfejsów API Yahoo w sekcji Uprawnienia interfejsu API w konsoli dewelopera Yahoo. Zakresy OAuth, o które prosi aplikacja, muszą dokładnie odpowiadać wstępnie skonfigurowanym zakresom w uprawnieniach interfejsu API aplikacji. Jeśli na przykład w przypadku kontaktów użytkownika wymagany jest dostęp do odczytu i zapisu, a w uprawnieniach interfejsu API aplikacji jest wstępnie skonfigurowany zakres OAuthsdct-w, zamiast zakresu OAuth tylko do odczytusdct-rnależy przekazać zakres OAuth do odczytu i zapisu. W przeciwnym razie proces się nie powiedzie, a użytkownik zobaczy komunikat o błędzie.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"]];
Więcej informacji znajdziesz w dokumentacji zakresów Yahoo.
Opcjonalnie: jeśli chcesz dostosować sposób wyświetlania przez aplikację elementów
SFSafariViewControllerlubUIWebViewpodczas wyświetlania użytkownikowi reCAPTCHA, utwórz klasę niestandardową zgodną z protokołemAuthUIDelegatei przekaż ją docredentialWithUIDelegate.Uwierzytelnij w Firebase za pomocą obiektu dostawcy OAuth.
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 }]; } }];
Za pomocą tokena dostępu OAuth możesz wywoływać interfejs API Yahoo.
Aby na przykład uzyskać podstawowe informacje o profilu, możesz wywołać interfejs API REST, przekazując token dostępu w nagłówku
Authorization:https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
gdzie
YAHOO_USER_UIDto identyfikator użytkownika Yahoo, który można pobrać z polaAuth.auth.currentUser.providerData[0].uidlub zauthResult.additionalUserInfo.profile.Powyższe przykłady dotyczą przepływów logowania, ale możesz też połączyć dostawcę Yahoo z istniejącym użytkownikiem za pomocą
linkWithPopup. Możesz na przykład połączyć wielu dostawców z tym samym użytkownikiem, aby mógł on logować się za pomocą dowolnego z nich.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 }];
Ten sam wzorzec można zastosować w przypadku funkcji
reauthenticateWithPopup/reauthenticateWithRedirect, która umożliwia pobieranie nowych danych logowania do operacji związanych z poufnymi danymi, które wymagają niedawnego logowania.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 }];
Dalsze kroki
Po pierwszym zalogowaniu się użytkownika tworzone jest nowe konto użytkownika, które jest powiązane z danymi logowania, czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania, za pomocą których użytkownik się zalogował. To nowe konto jest przechowywane w ramach projektu w Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie, niezależnie od sposobu logowania.
-
W aplikacjach możesz pobierać podstawowe informacje o profilu użytkownika z obiektu
User. Zobacz Zarządzanie użytkownikami. W Firebase Realtime Database i Cloud Storage regułach bezpieczeństwa możesz pobrać unikalny identyfikator zalogowanego użytkownika ze zmiennej
authi użyć go do kontrolowania, do jakich danych użytkownik może mieć dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj funkcję
signOut:.
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; }
Możesz też dodać kod obsługi błędów dla pełnego zakresu błędów uwierzytelniania. Zobacz Obsługa błędów.