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?
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