Uwierzytelniaj przy użyciu Yahoo na platformach Apple

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:

  1. Dodaj Firebase do projektu Apple.
  2. W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
  3. Na karcie Metoda logowania włącz dostawcę logowania Yahoo.
  4. Dodaj identyfikator klienta i tajny klucz klienta z konsoli deweloperskiej tego dostawcy do konfiguracji dostawcy:
    1. 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:profile i email.

    2. Podczas rejestrowania aplikacji u tych dostawców pamiętaj, aby zarejestrować domenę *.firebaseapp.com projektu jako domenę przekierowania aplikacji.
  5. 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:

  1. Dodaj niestandardowe schematy URL do projektu w Xcode:

    1. 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.
    2. 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):

      Zrzut ekranu przedstawiający interfejs konfiguracji niestandardowego schematu URI adresu URL w Xcode

  2. 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"];
        
  3. 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.

  4. Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza profile i email, 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 OAuth sdct-w, zamiast zakresu OAuth tylko do odczytu sdct-r należ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.

  5. Opcjonalnie: jeśli chcesz dostosować sposób wyświetlania przez aplikację elementów SFSafariViewController lub UIWebView podczas wyświetlania użytkownikowi reCAPTCHA, utwórz klasę niestandardową zgodną z protokołem AuthUIDelegate i przekaż ją do credentialWithUIDelegate.

  6. 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_UID to identyfikator użytkownika Yahoo, który można pobrać z pola Auth.auth.currentUser.providerData[0].uid lub z authResult.additionalUserInfo.profile.

  7. 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
    }];
        
  8. 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 auth i 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.