Mit einer Telefonnummer und C++ bei Firebase authentifizieren

Du kannst Firebase Authentication verwenden, um einen Nutzer durch Senden einer SMS anzumelden auf das Smartphone der Nutzenden übertragen. Der Nutzer meldet sich mit einem Einmalcode an, der in der SMS enthalten ist.

In diesem Dokument wird beschrieben, wie Sie mit das Firebase SDK.

Hinweis

  1. Fügen Sie Firebase zu Ihrem Projekt.
  2. Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verknüpft haben, tun Sie dies in der Firebase Console.
  3. Machen Sie sich mit den Plattformanforderungen für die Anmeldung über die Telefonnummer vertraut:
    • Die Anmeldung über die Telefonnummer ist nur für mobile Plattformen möglich.
    • Auf iOS-Geräten ist für die Anmeldung mit der Telefonnummer ein physisches Gerät erforderlich. Sie funktioniert nicht auf einem Simulator.

Sicherheitsbedenken

Die Authentifizierung ü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. Auf Geräten mit mehreren Nutzern Profilen hinzugefügt, kann sich jeder Nutzer, der SMS-Nachrichten empfangen kann, über Telefonnummer des Geräts.

Wenn Sie sich in Ihrer App über eine Telefonnummer anmelden, sollten Sie diese anbieten und sicherere Anmeldemethoden nutzen und die Nutzer über die Sicherheit informieren, welche Nachteile es bei der Anmeldung über die Telefonnummer hat.

Anmeldung über die Telefonnummer für Ihr Firebase-Projekt aktivieren

Wenn Sie Nutzer per SMS anmelden möchten, müssen Sie zuerst die Anmeldung mit der Telefonnummer aktivieren für Ihr Firebase-Projekt an:

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung.
  2. Aktivieren Sie auf der Seite Sign-in Method (Anmeldemethode) die Option Phone Number (Telefonnummer). Anmeldemethode aus.

APNs-Benachrichtigungen erhalten (Apple-Plattformen)

Damit Sie die Authentifizierung per Telefonnummer auf Apple-Plattformen verwenden können, muss Ihre App APNs-Benachrichtigungen von Firebase. Wenn Sie einen Nutzer mit seinem Smartphone anmelden auf einem Gerät zum ersten Mal verwendet, sendet Firebase Authentication einen stillen Push. Benachrichtigung an das Gerät, um zu bestätigen, dass die Anmeldeanfrage für die Telefonnummer stammt aus Ihrer App. Aus diesem Grund kann die Anmeldung über die Telefonnummer nicht verwendet werden. in einem Simulator.)

So aktivieren Sie APN-Benachrichtigungen zur Verwendung mit Firebase Authentication:

  1. In Xcode: Push-Benachrichtigungen für Ihr Projekt zu aktivieren.
  2. Laden Sie Ihr APNs-Zertifikat in Firebase hoch. Wenn Sie noch kein APNs-Zertifikat haben, erstellen Sie eines im Apple Developer Member Center

    1. Wählen Sie in der Firebase-Konsole in Ihrem Projekt das Zahnradsymbol, wählen Sie Project Settings (Projekteinstellungen) und wählen Sie das Cloud Messaging.

    2. Wählen Sie das Upload Certificate (Zertifikat hochladen) aus. für Ihr Entwicklungszertifikat, Ihren Produktionszertifikat oder beides. Mindestens eines ist erforderlich.

    3. Wählen Sie für jedes Zertifikat die P12-Datei aus und geben Sie das Passwort, falls vorhanden. Die Paket-ID für dieses Zertifikat muss angegeben werden mit der Bundle-ID Ihrer App übereinstimmt. Auswählen Klicken Sie auf Speichern.

Bestätigungscode an die Telefonnummer des Nutzers senden

Wenn Sie die Anmeldung per Telefonnummer initiieren möchten, zeigen Sie dem Nutzer eine Benutzeroberfläche an, in der er aufgefordert wird, seine Telefonnummer anzugeben. Rufen Sie dann PhoneAuthProvider::VerifyPhoneNumber auf, um Firebase zu bitten, dem Nutzer per SMS einen Authentifizierungscode zu senden:

  1. Telefonnummer des Nutzers abrufen

    Die rechtlichen Anforderungen variieren. Als Best Practice und um die Erwartungen Ihrer Nutzer zu steuern, sollten Sie sie darüber informieren, dass sie bei der Anmeldung per Smartphone möglicherweise eine SMS zur Bestätigung erhalten und dabei die üblichen Gebühren anfallen.

  2. Rufen Sie PhoneAuthProvider::VerifyPhoneNumber auf und übergeben Sie die Telefonnummer des Nutzers.
    class 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);
    Wenn du PhoneAuthProvider::VerifyPhoneNumber aufrufst, feuert Firebase einen
    • (unter iOS) sendet eine stille Push-Benachrichtigung an Ihre App,
    • sendet eine SMS mit einem Authentifizierungscode an die angegebene Telefonnummer und gibt eine Bestätigungs-ID an die Abschlussfunktion weiter. Sie benötigen sowohl den Bestätigungscode als auch die Verifizierungs-ID, um melden Sie sich an.
  3. Speichern Sie die Bestätigungs-ID und stellen Sie sie wieder her, wenn die App geladen wird. So können Sie dafür sorgen, dass Sie immer noch 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 beliebig beibehalten. Wenn Sie schreiben, mit einem plattformübergreifenden C++ Framework entwickelt, sollte es Benachrichtigungen für App- Beendigung und Wiederherstellung. Diese Termine können Sie speichern und wiederherstellen, die Bestätigungs-ID.

Wenn der Aufruf von VerifyPhoneNumber dazu führt, dass OnCodeSent in deinem Listener aufgerufen wird, kannst du den Nutzer auffordern, den Bestätigungscode einzugeben, sobald er ihn in der SMS-Nachricht erhält.

Wenn der Aufruf von VerifyPhoneNumber dagegen zu OnVerificationCompleted führt, war die automatische Bestätigung erfolgreich und Sie haben jetzt eine PhoneAuthCredential, die Sie wie unten beschrieben verwenden können.

Nutzer mit Bestätigungscode anmelden

Nachdem der Nutzer Ihrer App den Bestätigungscode aus der SMS-Nachricht mitgeteilt 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.

  1. Rufen Sie den Bestätigungscode vom Nutzer ab.
  2. Erstellen Sie ein Credential-Objekt aus dem Bestätigungscode und Bestätigungs-ID.
    PhoneAuthCredential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. 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

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und die mit den Anmeldedaten verknüpft sind, d. h. Nutzername und Passwort, oder Authentifizierungsanbieter-Informationen – also für den Nutzer, mit dem sich der Nutzer angemeldet hat. Diese neue -Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um in jeder App in Ihrem Projekt einen Nutzer erreichen, unabhängig davon, wie er sich anmeldet.

  • Die grundlegenden Profilinformationen der Nutzer finden Sie in Ihren Apps über die firebase::auth::User-Objekt:

    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 Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.

Sie können Nutzern erlauben, sich mit Mehrfachauthentifizierung in Ihrer App anzumelden indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem eines bestehenden Nutzerkontos.

Rufen Sie auf, um einen Nutzer abzumelden. SignOut():

auth->SignOut();