Я использую react-native-firebase
v5.6 в проекте.
Цель: В процессе регистрации пользователь вводит свой номер телефона, а затем отправляет OTP на указанный номер телефона. Я хочу иметь возможность сравнивать введенный пользователем код с кодом, отправленным из Firebase, чтобы иметь возможность предоставить доступ к следующим этапам регистрации.
Проблема: пользователь получает SMS OTP и все, но объект phoneAuthSnapshot
, возвращаемый firebase.auth().verifyPhoneNumber(number).on('state_changed', (phoneAuthSnapshot => {})
, не дает значения для кода, который отправил firebase, поэтому сравнивать пользователей не с чем введенный код с. Однако есть значение для свойства verificationId
. Вот возвращаемый объект из вышеуказанного метода:
'Verification code sent', {
verificationId: 'AM5PThBmFvPRB6x_tySDSCBG-6tezCCm0Niwm2ohmtmYktNJALCkj11vpwyou3QGTg_lT4lkKme8UvMGhtDO5rfMM7U9SNq7duQ41T8TeJupuEkxWOelgUiKf_iGSjnodFv9Jee8gvHc50XeAJ3z7wj0_BRSg_gwlN6sumL1rXJQ6AdZwzvGetebXhZMb2gGVQ9J7_JZykCwREEPB-vC0lQcUVdSMBjtig',
code: null,
error: null,
state: 'sent'
}
Вот моя реализация на экране:
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));
});
Как получить код, отправленный из Firebase, для возможности сравнения?