Authentifizieren Sie sich mit Yahoo auf Apple-Plattformen

Sie können Ihren Benutzern die Authentifizierung bei Firebase über OAuth-Anbieter wie Yahoo ermöglichen, indem Sie eine generische OAuth-Anmeldung mit dem Firebase SDK in Ihre App integrieren, um den End-to-End-Anmeldevorgang durchzuführen.

Bevor Sie beginnen

Um Nutzer mit Yahoo-Konten anzumelden, müssen Sie zunächst Yahoo als Anmeldeanbieter für Ihr Firebase-Projekt aktivieren:

  1. In Firebase zu Ihrem Apple - Projekt .
  2. In der Firebase Konsole , öffnen Sie den Abschnitt Auth.
  3. Auf dem Anmelden Methode Registerkarte, aktivieren Sie den Yahoo - Anbieter.
  4. Fügen Sie die Client - ID und Client - Geheimnis von dem betreffenden Anbieter Entwickler - Konsole an den Provider - Konfiguration:
    1. Um ein Yahoo OAuth - Client zu registrieren, folgen Sie der Yahoo Entwickler - Dokumentation über eine Web - Anwendung mit Yahoo Registrierung .

      Achten Sie darauf , die beiden OpenID Connect API - Berechtigungen wählen: profile und email - email .

    2. Bei Anwendungen mit diesen Anbietern registrieren, müssen Sie die Registrierung *.firebaseapp.com Domain für Ihr Projekt als Redirect - Domain für Ihre App.
  5. Klicken Sie auf Speichern.

Verwalten Sie den Anmeldevorgang mit dem Firebase SDK

Führen Sie die folgenden Schritte aus, um den Anmeldevorgang mit dem Firebase-SDK für Apple-Plattformen abzuwickeln:

  1. Fügen Sie Ihrem Xcode-Projekt benutzerdefinierte URL-Schemas hinzu:

    1. Öffnen Sie Ihre Projektkonfiguration: Doppelklicken Sie in der linken Baumansicht auf den Projektnamen. Wählen Sie Ihre App aus dem Abschnitt VORGABEN, wählen Sie dann die Registerkarte Info, und erweitern Sie den URL - Typen Abschnitt.
    2. Klicken Sie auf die Schaltfläche +, und fügen Sie eine URL - Schema für die Reversed - Client - ID. Um diesen Wert zu finden, öffnen Sie die GoogleService-Info.plist Konfigurationsdatei, und suchen Sie nach dem REVERSED_CLIENT_ID Schlüssel. Kopieren Sie den Wert dieses Schlüssels, und fügen Sie ihn in das URL - Schemata auf der Konfigurationsseite Feld. Lassen Sie die anderen Felder leer.

      Nach Abschluss sollte Ihre Konfiguration in etwa wie folgt aussehen (aber mit Ihren anwendungsspezifischen Werten):

  2. Erstellen Sie eine Instanz eines OAuthProvider mit dem Provider - ID yahoo.com.

    Schnell

    var provider = OAuthProvider(providerID: "yahoo.com")
        

    Ziel c

    FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"yahoo.com"];
        
  3. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth Parameter , die Sie mit dem OAuth Anfrage senden möchten.

    Schnell

    provider.customParameters = [
    "prompt": "login",
    "language": "fr"
    ]
        

    Ziel c

    [provider setCustomParameters:@{@"prompt": @"login", @"language": @"fr"}];
        

    Für die Parameter Yahoo unterstützt, finden Sie in der Yahoo OAuth Dokumentation . Beachten Sie, dass Sie nicht Firebase-erforderliche Parameter mit übergeben können setCustomParameters . Diese Parameter sind client_id, redirect_uri, response_type, Umfang und Zustand.

  4. Optional: Geben Sie zusätzliche OAuth 2.0 Bereiche jenseits profile und email - email , dass Sie auf Anfrage vom Authentifizierungs - Provider wollen. Wenn Ihre Anwendung Zugriff auf private Benutzerdaten von Yahoo APIs erfordert, müssen Sie Anfrage Berechtigungen für Yahoo APIs unter API - Berechtigungen in der Yahoo - Entwickler - Konsole. Angeforderte OAuth-Bereiche müssen genau mit den vorkonfigurierten in den API-Berechtigungen der App übereinstimmen. Zum Beispiel , wenn die Lese- / Schreibzugriff auf Benutzerkontakte angefordert und in der App-API - Berechtigungen vorkonfiguriert, sdct-w anstelle des Nur - Lese - OAuth Umfang bestanden werden sdct-r . Andernfalls schlägt der Flow fehl und dem Endbenutzer wird ein Fehler angezeigt.

    Schnell

    // 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"]
        

    Ziel 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"]];
        

    Um mehr zu erfahren, finden Sie in der Yahoo Bereiche Dokumentation .

  5. Optional: Wenn Sie die Möglichkeit , Ihre App präsentiert die anpassen SFSafariViewController oder UIWebView , wenn die reCAPTCHA für den Benutzer, eine benutzerdefinierte Klasse erstellen , das entspricht das FIRAuthUIDelegate Protokoll und übergibt es an getCredentialWithUIDelegate:completion: .

  6. Authentifizieren Sie sich bei Firebase mithilfe des OAuth-Anbieterobjekts.

    Schnell

    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.accessToken
      // Yahoo OAuth ID token can be retrieved by calling:
      // authResult.credential.idToken
    }
    }
    }
        

    Ziel 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:
      // authResult.credential.accessToken
      // Yahoo OAuth ID token can be retrieved by calling:
      // authResult.credential.idToken
    }];
    }
    }];
        

    Unter Verwendung der OAuth - Zugriffstoken, können Sie den Anruf Yahoo API .

    Zum Beispiel Grundprofil Informationen zu erhalten, können Sie die REST - API aufrufen, die Zugriff vorbei in den Token - Authorization - Header:

    https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
    

    Wo YAHOO_USER_UID ist die ID des Yahoo Benutzers , die von dem abgerufen werden können Auth.auth.currentUser.providerData[0].uid Feld oder von authResult.additionalUserInfo.profile .

  7. Während die obigen Beispiele auf Anmelde-Flows konzentrieren, haben Sie auch die Möglichkeit , einen Yahoo - Provider zu einem vorhandenen Benutzer verwenden zu verknüpfen linkWithPopup . Sie können beispielsweise mehrere Anbieter mit demselben Benutzer verknüpfen, sodass sie sich bei beiden anmelden können.

    Schnell

    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.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }
        

    Ziel 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:
    // authResult.credential.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }];
        
  8. Das gleiche Muster kann mit verwendet wird reauthenticateWithPopup / reauthenticateWithRedirect die verwendet werden können frische Anmeldeinformationen für sensible Vorgänge abzurufen , die letzte Anmeldung erforderlich.

    Schnell

    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.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }
        

    Ziel 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:
    // authResult.credential.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }];
        

Nächste Schritte

Nachdem sich ein Benutzer zum ersten Mal anmeldet, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen – d. h. Benutzername und Kennwort, Telefonnummer oder Authentifizierungsanbieterinformationen – verknüpft, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Benutzer anmeldet.

  • In Ihren Anwendungen können Sie die Benutzerprofilgrundinformationen aus dem bekommen FIRUser Objekt. Siehe Benutzer verwalten .

  • In Ihrer Datenbank und Firebase Realtime Cloud Storage Sicherheitsregeln , können Sie die angemeldeten Nutzer die eindeutige Benutzer - ID aus der bekommen auth Variable, und es verwenden , um steuern kann ein Benutzer Zugriff , welche Daten.

Sie können Benutzer erlauben , durch mehrere Authentifizierungsanbieter anmelden, um Ihre App Verknüpfung Auth - Provider - Anmeldeinformationen zu einem vorhandenen Benutzerkonto.

Um einen Benutzer abzumelden, rufen signOut: .

Schnell

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

Ziel c

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Möglicherweise möchten Sie auch Fehlerbehandlungscode für alle Authentifizierungsfehler hinzufügen. Siehe Handle Fehler .