Sie können Ihren Nutzern die Authentifizierung bei Firebase mit OAuth-Anbietern wie GitHub ermöglichen. Dazu binden Sie die allgemeine OAuth-Anmeldung in Ihre App ein und verwenden das Firebase SDK, um den gesamten Anmeldevorgang auszuführen.
Hinweis
Wenn Sie Nutzer mit GitHub-Konten anmelden möchten, müssen Sie zuerst GitHub als Anmeldeanbieter für Ihr Firebase-Projekt aktivieren:
Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.
- Öffnen Sie Ihr App-Projekt und gehen Sie in Xcode zu File > Add Packages (Datei > Pakete hinzufügen).
- Fügen Sie bei entsprechender Aufforderung das Firebase Apple Platforms SDK-Repository hinzu:
- Wählen Sie die Bibliothek Firebase Authentication aus.
- Fügen Sie das Flag
-ObjCim Bereich Other Linker Flags (Andere Linker-Flags) der Build-Einstellungen Ihres Ziels hinzu. - Wenn Sie fertig, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.
https://github.com/firebase/firebase-ios-sdk.git
Führen Sie nun einige Konfigurationsschritte aus:
- Rufen Sie in der Firebase-Konsole Sicherheit > Authentifizierung auf.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter GitHub.
-
Fügen Sie die Client-ID und den Clientschlüssel aus der Entwicklerkonsole dieses Anbieters der Anbieterkonfiguration hinzu:
- Registrieren Sie Ihre Anwendung als Entwickleranwendung auf GitHub und rufen Sie die Client-ID und den Clientschlüssel für OAuth 2.0 ab.
-
Achten Sie darauf, dass Ihr OAuth-Weiterleitungs-URI von Firebase (z. B.
my-app-12345.firebaseapp.com/__/auth/handler) auf der Einstellungsseite Ihrer App in der Konfiguration Ihrer GitHub-App als Callback-URL für die Autorisierung festgelegt ist.
- Klicken Sie auf Speichern.
Anmeldevorgang mit dem Firebase SDK verarbeiten
So verarbeiten Sie den Anmeldevorgang mit dem Firebase Apple-Plattformen SDK:
Fügen Sie Ihrem Xcode-Projekt benutzerdefinierte URL-Schemas hinzu:
- Öffnen Sie Ihre Projektkonfiguration: Doppelklicken Sie in der linken Strukturansicht auf den Projektnamen. Wählen Sie im Bereich TARGETS Ihre App aus, wählen Sie dann den Tab Info aus und maximieren Sie den Bereich URL Types.
-
Klicken Sie auf das Pluszeichen (+) und fügen Sie die codierte App-ID als URL-Schema hinzu.
Lassen Sie die anderen Felder leer.
Sie finden Ihre codierte App-ID in der Firebase-Konsole: Gehen Sie zu den
Einstellungen > Tab Allgemein und scrollen Sie dann nach unten zum Abschnitt Meine Apps, um Details zu Ihrer iOS-App aufzurufen.Wenn der Vorgang abgeschlossen ist, sollte Ihre Konfiguration in etwa so aussehen (jedoch mit Ihren anwendungsspezifischen Werten):
Erstellen Sie eine Instanz eines OAuthProvider mit der Anbieter-ID github.com.
Swift
var provider = OAuthProvider(providerID: "github.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die Sie mit der OAuth-Anfrage senden möchten.
Swift
provider.customParameters = [ "allow_signup": "false" ]
Objective-C
[provider setCustomParameters:@{@"allow_signup": @"false"}];
Informationen zu den von GitHub unterstützten Parametern finden Sie in der GitHub OAuth-Dokumentation. Beachten Sie, dass Sie mit
setCustomParameterskeine für Firebase erforderlichen Parameter übergeben können. Diese Parameter sind client_id, redirect_uri, response_type, scope und state.Optional: Geben Sie zusätzliche OAuth 2.0-Bereiche über das grundlegende Profil hinaus an, die Sie vom Authentifizierungsanbieter anfordern möchten. Wenn Ihre Anwendung Zugriff auf private Nutzerdaten von GitHub APIs benötigt, müssen Sie in der GitHub-Entwicklerkonsole unter API-Berechtigungen Berechtigungen für den Zugriff auf GitHub APIs anfordern. Die angeforderten OAuth-Bereiche müssen genau mit den vorkonfigurierten Bereichen in den API-Berechtigungen der App übereinstimmen.
Swift
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = ["user:email"]
Objective-C
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. [provider setScopes:@[@"user:email"]];
Weitere Informationen finden Sie in der Dokumentation zu GitHub-Bereichen.
Optional: Wenn Sie anpassen möchten, wie Ihre App die
SFSafariViewControlleroderUIWebViewdarstellt, wenn dem Nutzer das reCAPTCHA angezeigt wird, erstellen Sie eine benutzerdefinierte Klasse, die demAuthUIDelegate-Protokoll entspricht, und übergeben Sie sie ancredentialWithUIDelegate.Authentifizieren Sie sich mit dem OAuth-Anbieterobjekt bei Firebase.
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. guard let oauthCredential = authResult.credential as? OAuthCredential else { return } // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // 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. FIROAuthCredential *oauthCredential = (FIROAuthCredential *)authResult.credential; // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // oauthCredential.idToken }]; } }];
Mit dem OAuth-Zugriffstoken können Sie die GitHub API aufrufen.
Wenn Sie beispielsweise grundlegende Profilinformationen abrufen möchten, können Sie die REST API aufrufen und das Zugriffstoken im Header
Authorizationübergeben:https://api.github.com/user
In den obigen Beispielen geht es um Anmeldeabläufe. Sie können aber auch einen GitHub-Anbieter mit einem vorhandenen Nutzer verknüpfen. Sie können beispielsweise mehrere Anbieter mit demselben Nutzer verknüpfen, sodass er sich mit beiden anmelden kann.
Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // GitHub 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. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
Dasselbe Muster kann mit
reauthenticateWithCredentialverwendet werden, um neue Anmeldedaten für sensible Vorgänge abzurufen, die eine aktuelle Anmeldung erfordern.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 // GitHub 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 // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und dem Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem Objekt
Userabrufen. Weitere Informationen finden Sie unter Nutzer verwalten. In Ihren Sicherheitsregeln für Firebase Realtime Database und Cloud Storage können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
authabrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern erlauben, sich mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Wenn Sie einen Nutzer abmelden möchten, rufen Sie
signOut: auf.
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; }
Sie können auch Fehlerbehandlungscode für alle Authentifizierungsfehler hinzufügen. Weitere Informationen finden Sie unter Fehler verarbeiten.