web-dev-qa-db-fra.com

Comment utiliser «verifyPhoneNumber ()» de Firebase pour confirmer # la propriété du téléphone sans utiliser # pour vous connecter?

J'utilise react-native-firebase V5.6 dans un projet.

Objectif: Dans le flux d'inscription, je demande à l'utilisateur de saisir son numéro de téléphone, puis j'envoie un OTP audit numéro de téléphone. Je veux pouvoir comparer le code saisi par l'utilisateur avec le code envoyé depuis Firebase, pour pouvoir accorder l'entrée aux étapes suivantes de l'inscription.

Problème: l'utilisateur obtient le SMS OTP et tout, mais l'objet phoneAuthSnapshot renvoyé par firebase.auth().verifyPhoneNumber(number).on('state_changed', (phoneAuthSnapshot => {}), il ne donne pas de valeur pour le code qui firebase envoyé, il n'y a donc rien avec lequel comparer le code saisi par les utilisateurs. Cependant, il existe une valeur pour la propriété verificationId. Voici l'objet renvoyé par la méthode ci-dessus:

'Verification code sent', { 
  verificationId: 'AM5PThBmFvPRB6x_tySDSCBG-6tezCCm0Niwm2ohmtmYktNJALCkj11vpwyou3QGTg_lT4lkKme8UvMGhtDO5rfMM7U9SNq7duQ41T8TeJupuEkxWOelgUiKf_iGSjnodFv9Jee8gvHc50XeAJ3z7wj0_BRSg_gwlN6sumL1rXJQ6AdZwzvGetebXhZMb2gGVQ9J7_JZykCwREEPB-vC0lQcUVdSMBjtig',
  code: null,
  error: null,
  state: 'sent' 
}

Voici ma mise en œuvre à l'écran:

firebase
  .firestore()
  .collection('users')
  .where('phoneNumber', '==', this.state.phoneNumber)
  .get()
  .then((querySnapshot) => {
    if (querySnapshot.empty === true) {
      // change status
      this.setState({ status: 'Sending confirmation code...' });
      // send confirmation OTP
      firebase.auth().verifyPhoneNumber(this.state.phoneNumber).on(
        'state_changed',
        (phoneAuthSnapshot) => {
          switch (phoneAuthSnapshot.state) {
            case firebase.auth.PhoneAuthState.CODE_SENT:
              console.log('Verification code sent', phoneAuthSnapshot);
              this.setState({ status: 'Confirmation code sent.', confirmationCode: phoneAuthSnapshot.code });

              break;
            case firebase.auth.PhoneAuthState.ERROR:
              console.log('Verification error: ' + JSON.stringify(phoneAuthSnapshot));
              this.setState({ status: 'Error sending code.', processing: false });
              break;
          }
        },
        (error) => {
          console.log('Error verifying phone number: ' + error);
        }
      );
    }
  })
  .catch((error) => {
    // there was an error
    console.log('Error during firebase operation: ' + JSON.stringify(error));
  });

Comment obtenir le code envoyé par Firebase pour pouvoir comparer?

3
Jim

Ceci n'est malheureusement pas pris en charge par Firebase. La connexion et la déconnexion après avoir signéInWithCredential peuvent fonctionner, mais sont très déroutantes

0
ridvan_cln