Catch up on everthing we announced at this year's Firebase Summit. Learn more

Authentifiez-vous avec Firebase à l'aide d'un numéro de téléphone et de C++

Vous pouvez utiliser l'authentification Firebase pour connecter un utilisateur en envoyant un message SMS sur le téléphone de l'utilisateur. L'utilisateur se connecte à l'aide d'un code à usage unique contenu dans le message SMS.

Ce document explique comment mettre en œuvre un flux de connexion par numéro de téléphone à l'aide du SDK Firebase.

Avant que tu commences

  1. Ajouter Firebase à votre projet C ++ .
  2. Si vous n'êtes pas encore connecté votre application à votre projet Firebase, faites à partir de la console Firebase .

Sur les plates-formes Apple, notez que la connexion par numéro de téléphone nécessite un appareil physique et ne fonctionnera pas sur un simulateur.

Problèmes de sécurité

L'authentification utilisant uniquement un numéro de téléphone, bien que pratique, est moins sécurisée que les autres méthodes disponibles, car la possession d'un numéro de téléphone peut être facilement transférée entre les utilisateurs. De plus, sur les appareils dotés de plusieurs profils d'utilisateurs, tout utilisateur pouvant recevoir des messages SMS peut se connecter à un compte à l'aide du numéro de téléphone de l'appareil.

Si vous utilisez la connexion basée sur un numéro de téléphone dans votre application, vous devez l'offrir avec des méthodes de connexion plus sécurisées et informer les utilisateurs des compromis de sécurité liés à l'utilisation de la connexion par numéro de téléphone.

Activer la connexion par numéro de téléphone pour votre projet Firebase

Pour connecter les utilisateurs par SMS, vous devez d'abord activer la méthode de connexion par numéro de téléphone pour votre projet Firebase :

  1. Dans la console Firebase , ouvrez la section d' authentification.
  2. Sur la page de connexion Méthode, activez le signe dans Numéro de téléphone méthode.

Le quota de demande de connexion par numéro de téléphone de Firebase est suffisamment élevé pour que la plupart des applications ne soient pas affectées. Cependant, si vous devez vous connecter à un très grand nombre d'utilisateurs avec une authentification téléphonique, vous devrez peut-être mettre à niveau votre plan tarifaire. Voir la prix page.

Commencez à recevoir des notifications APN (plateformes Apple)

Pour utiliser l'authentification par numéro de téléphone sur les plates-formes Apple, votre application doit pouvoir recevoir des notifications APN de Firebase. Lorsque vous connectez un utilisateur avec son numéro de téléphone pour la première fois sur un appareil, Firebase Authentication envoie une notification push silencieuse à l'appareil pour vérifier que la demande de connexion par numéro de téléphone provient de votre application. (Pour cette raison, la connexion par numéro de téléphone ne peut pas être utilisée sur un simulateur.)

Pour activer les notifications APN à utiliser avec Firebase Authentication :

  1. Dans Xcode, activer les notifications push pour votre projet.
  2. Téléchargez votre certificat APNs sur Firebase. Si vous ne possédez pas déjà un certificat APNs, assurez - vous de créer un dans le Apple Developer Member Center .

    1. A l' intérieur de votre projet dans la console Firebase, sélectionnez l'icône d'engrenage, sélectionnez Paramètres du projet, puis sélectionnez l'onglet Nuage de messagerie.

    2. Cliquez sur le bouton Télécharger le certificat pour votre certificat de développement, votre certificat de production, ou les deux. Au moins un est requis.

    3. Pour chaque certificat, sélectionnez le fichier .p12 et fournissez le mot de passe, le cas échéant. Assurez-vous que l'ID de groupe de ce certificat correspond à l'ID de groupe de votre application. Sélectionnez Enregistrer.

Envoyer un code de vérification sur le téléphone de l'utilisateur

Pour lancer le numéro de téléphone de connexion, présenter à l'utilisateur une interface qui invites eux pour fournir leur numéro de téléphone, puis appelez PhoneAuthProvider::VerifyPhoneNumber à la demande que Firebase envoyer un code d'authentification sur le téléphone de l'utilisateur par SMS:

  1. Obtenez le numéro de téléphone de l'utilisateur.

    Les exigences légales varient, mais en tant que meilleure pratique et pour définir les attentes de vos utilisateurs, vous devez les informer que s'ils utilisent la connexion par téléphone, ils peuvent recevoir un message SMS pour vérification et que les tarifs standard s'appliquent.

  2. Appelez PhoneAuthProvider::VerifyPhoneNumber , en lui passant le numéro de téléphone de l'utilisateur.
    class PhoneListener : public PhoneAuthProvider::Listener {
     public:
      ~PhoneListener() override {}
    
      void OnVerificationCompleted(Credential 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;
    PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth);
    phone_provider->VerifyPhoneNumber(phone_number, kAutoVerifyTimeOut, null,
                                      &phone_listener);
    
    Lorsque vous appelez PhoneAuthProvider::VerifyPhoneNumber , Firebase,
    • (sur iOS) envoie une notification push silencieuse à votre application,
    • envoie un message SMS contenant un code d'authentification au numéro de téléphone spécifié et transmet un ID de vérification à votre fonction d'achèvement. Vous aurez besoin du code de vérification et de l'ID de vérification pour vous connecter à l'utilisateur.
  3. Enregistrez l'ID de vérification et restaurez-le lorsque votre application se charge. Ce faisant, vous pouvez vous assurer que vous disposez toujours d'un ID de vérification valide si votre application est fermée avant que l'utilisateur n'ait terminé le flux de connexion (par exemple, lors du passage à l'application SMS).

    Vous pouvez conserver l'ID de vérification comme vous le souhaitez. Si vous écrivez avec un framework C++ multiplateforme, il devrait fournir des notifications pour la fermeture et la restauration de l'application. Lors de ces événements, vous pouvez respectivement enregistrer et restaurer l'ID de vérification.

Si l'appel à VerifyPhoneNumber résultats en OnCodeSent appelé sur votre Listener, vous pouvez demander à l'utilisateur de saisir le code de vérification quand ils le reçoivent dans le message SMS.

D'autre part, si l'appel à VerifyPhoneNumber résultats dans OnVerificationCompleted , puis vérification automatique a réussi et vous aurez maintenant un des Credential de Credential avec lequel vous pouvez utiliser comme décrit ci - dessous.

Connectez-vous à l'utilisateur avec le code de vérification

Une fois l'utilisateur fournit votre application avec le code de vérification du message SMS, connectez - vous l'utilisateur en créant un Credential objet à partir du code de vérification et l' ID de vérification et de passage à cet objet Auth::SignInWithCredential .

  1. Obtenez le code de vérification de l'utilisateur.
  2. Créer un Credential objet à partir du code de vérification et l' ID de vérification.
    Credential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. Connectez - vous à l'utilisateur l' Credential objet:
    Future<User*> future = auth_->SignInWithCredential(credential);
    future.OnCompletion(
        [](const Future<User*>& result, void*) {
          if (result.error() == kAuthErrorNone) {
            // Successful.
            // User is signed in.
            const 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);
    

Prochaines étapes

Une fois qu'un utilisateur se connecte pour la première fois, un nouveau compte d'utilisateur est créé et lié aux informations d'identification, c'est-à-dire le nom d'utilisateur et le mot de passe, le numéro de téléphone ou les informations du fournisseur d'autorisation, avec lesquelles l'utilisateur s'est connecté. Ce nouveau compte est stocké dans le cadre de votre projet Firebase et peut être utilisé pour identifier un utilisateur dans chaque application de votre projet, quel que soit le mode de connexion de l'utilisateur.

  • Dans vos applications, vous pouvez obtenir des informations de profil de base de l'utilisateur du firebase::auth::User objet:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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();
    }
    
  • Dans votre base de données et en temps réel Firebase Cloud Storage Les règles de auth sécurité , vous pouvez obtenir la signature dans ID d'utilisateur unique de l' utilisateur de la auth variable et l' utiliser pour contrôler les données d' un accès utilisateur peut.

Vous pouvez permettre aux utilisateurs de se connecter à votre application à l' aide des fournisseurs d'authentification multiples en reliant les informations d' identification de fournisseur auth à un compte d'utilisateur existant.

Pour vous déconnecter un utilisateur, appelez SignOut() :

auth->SignOut();