Mit Firebase Authentication können Sie einen Nutzer anmelden, indem Sie eine SMS an sein Smartphone senden. Der Nutzer meldet sich mit einem Einmalcode an, der in der SMS enthalten ist.
In diesem Dokument wird beschrieben, wie Sie mit dem Firebase SDK einen Anmeldevorgang mit Telefonnummer implementieren.
Hinweis
- Firebase zu Ihrem C++-Projekt hinzufügen
- Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verknüpft haben, können Sie das in der Firebase Console tun.
- Informationen zu den Plattformanforderungen für die Anmeldung mit Telefonnummer:
- Die Anmeldung mit Telefonnummer ist nur für mobile Plattformen verfügbar.
- Unter iOS ist für die Anmeldung mit Telefonnummer ein physisches Gerät erforderlich. Die Anmeldung funktioniert nicht auf einem Simulator.
Sicherheitsbedenken
Die Authentifizierung nur über eine Telefonnummer ist zwar praktisch, aber weniger sicher als die anderen verfügbaren Methoden, da der Besitz einer Telefonnummer leicht zwischen Nutzern übertragen werden kann. Außerdem kann sich auf Geräten mit mehreren Nutzerprofilen jeder Nutzer, der SMS-Nachrichten empfangen kann, mit der Telefonnummer des Geräts in einem Konto anmelden.
Wenn Sie die Anmeldung per Telefonnummer in Ihrer App verwenden, sollten Sie sie neben sichereren Anmeldemethoden anbieten und Nutzer über die Sicherheitsrisiken der Anmeldung per Telefonnummer informieren.
Anmeldung mit Telefonnummer für Ihr Firebase-Projekt aktivieren
Wenn Sie Nutzer per SMS anmelden möchten, müssen Sie zuerst die Anmeldemethode „Telefonnummer“ für Ihr Firebase-Projekt aktivieren:
- Wechseln Sie in der Firebase-Konsole zu Sicherheit > Authentifizierung.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Telefon.
-
Legen Sie eine Richtlinie für die Regionen fest, in die SMS gesendet werden dürfen oder nicht. Wenn Sie eine SMS-Regionsrichtlinie festlegen, können Sie Ihre Apps besser vor SMS-Missbrauch schützen. Bei neuen Projekten sind in der Standardrichtlinie keine Regionen zulässig.
- Rufen Sie in der Firebase-Konsole den Tab Einstellungen unter Sicherheit > Authentifizierung auf.
- Richten Sie im Abschnitt Richtlinie für SMS-Regionen Ihre Richtlinie für SMS-Regionen ein.
APNs-Benachrichtigungen erhalten (Apple-Plattformen)
Wenn Sie die Telefonnummernauthentifizierung auf Apple-Plattformen verwenden möchten, muss Ihre App APNs-Benachrichtigungen von Firebase empfangen können. Wenn Sie einen Nutzer zum ersten Mal auf einem Gerät mit seiner Telefonnummer anmelden, sendet Firebase Authentication eine stille Push-Benachrichtigung an das Gerät, um zu bestätigen, dass die Anmeldeanfrage mit der Telefonnummer von Ihrer App stammt. Aus diesem Grund kann die Anmeldung mit der Telefonnummer nicht auf einem Simulator verwendet werden.
So aktivieren Sie APNs-Benachrichtigungen für die Verwendung mit Firebase Authentication:
- Aktivieren Sie Push-Benachrichtigungen für Ihr Projekt in Xcode.
Laden Sie Ihr APNs-Zertifikat in Firebase hoch. Wenn Sie noch kein APNs-Zertifikat haben, erstellen Sie eines im Apple Developer Member Center.
-
Rufen Sie in der Firebase Console
Einstellungen > Allgemein auf. Klicken Sie dann auf den Tab Cloud Messaging. - Klicken Sie auf Zertifikat hochladen für Ihr Entwicklungszertifikat, Ihr Produktionszertifikat oder beide. Mindestens eine Angabe ist erforderlich.
-
Wählen Sie für jedes Zertifikat die
.p12-Datei aus und geben Sie das Passwort an, falls vorhanden. Achten Sie darauf, dass die Paket-ID für dieses Zertifikat mit der Paket-ID Ihrer App übereinstimmt. Klicken Sie auf Speichern.
-
Rufen Sie in der Firebase Console
Bestätigungscode an das Smartphone des Nutzers senden
Um die Anmeldung mit Telefonnummer zu starten, präsentieren Sie dem Nutzer eine Benutzeroberfläche, in der er aufgefordert wird, seine Telefonnummer anzugeben. Rufen Sie dann PhoneAuthProvider::VerifyPhoneNumber auf, um Firebase aufzufordern, einen Authentifizierungscode per SMS an das Telefon des Nutzers zu senden:
-
Telefonnummer des Nutzers abrufen.
Die rechtlichen Anforderungen variieren. Als Best Practice und um die Erwartungen Ihrer Nutzer zu erfüllen, sollten Sie sie jedoch darüber informieren, dass sie bei der Anmeldung mit dem Smartphone möglicherweise eine SMS zur Bestätigung erhalten und dass die Standardgebühren gelten.
- Rufen Sie
PhoneAuthProvider::VerifyPhoneNumberauf und übergeben Sie die Telefonnummer des Nutzers. Wenn Sieclass PhoneListener : public PhoneAuthProvider::Listener { public: ~PhoneListener() override {} void OnVerificationCompleted(PhoneAuthCredential credential) override { // Auto-sms-retrieval or instant validation has succeeded (Android only). // No need for the user to input the verification code manually. // `credential` can be used instead of calling GetCredential(). } void OnVerificationFailed(const std::string& error) override { // Verification code not sent. } void OnCodeSent(const std::string& verification_id, const PhoneAuthProvider::ForceResendingToken& force_resending_token) override { // Verification code successfully sent via SMS. // Show the Screen to enter the Code. // Developer may want to save that verification_id along with other app states in case // the app is terminated before the user gets the SMS verification code. } }; PhoneListener phone_listener; PhoneAuhtOptions options; options.timeout_milliseconds = kAutoVerifyTimeOut; options.phone_number = phone_number; PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth); phone_provider->VerifyPhoneNumber(options, &phone_listener);
PhoneAuthProvider::VerifyPhoneNumberaufrufen, Firebase,- (auf iOS) – es wird eine stille Push-Benachrichtigung an Ihre App gesendet.
- sendet eine SMS mit einem Authentifizierungscode an die angegebene Telefonnummer und übergibt eine Bestätigungs-ID an Ihre Abschlussfunktion. Sie benötigen sowohl den Bestätigungscode als auch die Bestätigungs-ID, um den Nutzer anzumelden.
-
Speichern Sie die Bestätigungs-ID und stellen Sie sie wieder her, wenn Ihre App geladen wird. So können Sie dafür sorgen, dass Sie weiterhin eine gültige Bestätigungs-ID haben, wenn Ihre App beendet wird, bevor der Nutzer den Anmeldevorgang abgeschlossen hat (z. B. beim Wechsel zur SMS-App).
Sie können die Bestätigungs-ID auf beliebige Weise speichern. Wenn Sie mit einem plattformübergreifenden C++-Framework entwickeln, sollten Benachrichtigungen für das Beenden und Wiederherstellen von Apps bereitgestellt werden. Bei diesen Ereignissen können Sie die Bestätigungs-ID speichern und wiederherstellen.
Wenn der Aufruf von VerifyPhoneNumber dazu führt, dass OnCodeSent für Ihren Listener aufgerufen wird, können Sie den Nutzer auffordern, den Bestätigungscode einzugeben, wenn er ihn in der SMS erhält.
Wenn der Aufruf von VerifyPhoneNumber hingegen OnVerificationCompleted zurückgibt, war die automatische Bestätigung erfolgreich und Sie haben jetzt ein PhoneAuthCredential, das Sie wie unten beschrieben verwenden können.
Nutzer mit dem Bestätigungscode anmelden
Nachdem der Nutzer Ihrer App den Bestätigungscode aus der SMS zur Verfügung gestellt hat, melden Sie ihn an, indem Sie ein PhoneAuthCredential-Objekt aus dem Bestätigungscode und der Bestätigungs-ID erstellen und dieses Objekt an Auth::SignInWithCredential übergeben.
- Fordern Sie den Bestätigungscode vom Nutzer an.
- Erstellen Sie ein
Credential-Objekt aus dem Bestätigungscode und der Bestätigungs-ID.PhoneAuthCredential credential = phone_auth_provider->GetCredential( verification_id_.c_str(), verification_code.c_str());
- Melden Sie den Nutzer mit dem
Credential-Objekt an:Future<User> future = auth_->SignInWithCredential(credential); future.OnCompletion( [](const Future<User*>& result, void*) { if (result.error() == kAuthErrorNone) { // Successful. // User is signed in. User user = *result.result(); // This should display the phone number. printf("Phone number: %s", user.phone_number().c_str()); // The phone number provider UID is the phone number itself. printf("Phone provider uid: %s", user.uid().c_str()); // The phone number providerID is 'phone' printf("Phone provider ID: %s", user.provider_id().c_str()); } else { // Error. printf("Sign in error: %s", result.error_message().c_str()); } }, nullptr);
Nächste Schritte
Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und 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 allen Apps Ihres Projekts zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem
firebase::auth::User-Objekt abrufen:firebase::auth::User user = auth->current_user(); if (user.is_valid()) { std::string name = user.display_name(); std::string email = user.email(); std::string photo_url = user.photo_url(); // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use firebase::auth::User::Token() instead. std::string uid = user.uid(); }
In Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der
auth-Variablen abrufen 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.
Rufen Sie
SignOut() auf, um einen Nutzer abzumelden:
auth->SignOut();