Пользователи моего приложения больше не могут проверять коды SMS для входа в приложение. Я получаю ответ от сервера:
Недействительный идентификатор проверки, использованный для создания идентификационных данных телефона.
Я использую React Native Firebase 6.3.0 - пользователи, которые ранее регистрировались для учетных записей, могут по-прежнему входить в систему. Я предоставляю идентификатор проверки, который возвращается из Firebase с помощью следующих функций:
export const authorizeFirebase = phoneNumber => {
return new Promise((res, rej) => {
firebase.auth()
.verifyPhoneNumber(phoneNumber)
.on('state_changed', async phoneAuthSnapshot => {
switch (phoneAuthSnapshot.state) {
case firebase.auth.PhoneAuthState.AUTO_VERIFIED: // or 'verified'
const { verificationId, code } = phoneAuthSnapshot;
const accessToken = await confirmCode(verificationId, code);
const result = await firebase.auth().signInWithPhoneNumber(phoneNumber, true);
res(accessToken);
break;
case firebase.auth.PhoneAuthState.CODE_SENT: // or 'sent'
res(phoneAuthSnapshot)
break;
case firebase.auth.PhoneAuthState.AUTO_VERIFY_TIMEOUT: // or 'timeout'
res(phoneAuthSnapshot)
break;
case firebase.auth.PhoneAuthState.ERROR: // or 'error'
rej(phoneAuthSnapshot.error)
break;
}
}, (error) => {
rej(error)
});
})
}
export const confirmCode = async (verificationId, code) => {
try {
const credential = await firebase.auth.PhoneAuthProvider.credential(verificationId, code);
const smsCodeAuthenticationResponse = await authenticate(credential);
return smsCodeAuthenticationResponse.response;
} catch (error) {
return { responseType: 'error', response: error };
}
}
const authenticate = async (credential) => {
try {
const { user } = await firebase.auth().signInWithCredential(credential);
const accessToken = await user.getIdToken();
return { responseType: 'success', response: accessToken };
} catch (error) {
return { responseType: 'error', response: error };
}
}
Я потратил весь день, пытаясь выяснить это, но не везет. Зачем Firebase предоставлять верификационный идентификатор, который нельзя использовать?
Любые идеи относительно того, как я могу это исправить, очень ценятся!