I am using firebase
phone auth in react native app with this docs, I tested it in some different devices. sometimes the phone auth
works and sometimes it throws this error
firebase phone auth Error: Invalid token. at nativeToJSError
I have gone through the docs of firebase and try to understand this error. Here is my code snippet:
confirmPhone = async(phoneNumber) => {
const phoneWithAreaCode = phoneNumber.replace(/^0+/, '+972');
return new Promise((res, rej) => {
firebase.auth().verifyPhoneNumber(phoneWithAreaCode)
.on('state_changed', async(phoneAuthSnapshot) => {
switch (phoneAuthSnapshot.state) {
case firebase.auth.PhoneAuthState.AUTO_VERIFIED:
UserStore.setVerificationId(phoneAuthSnapshot.verificationId)
await this.confirmCode(phoneAuthSnapshot.verificationId, phoneAuthSnapshot.code, phoneAuthSnapshot)
res(phoneAuthSnapshot)
break
case firebase.auth.PhoneAuthState.CODE_SENT:
UserStore.setVerificationId(phoneAuthSnapshot.verificationId)
res(phoneAuthSnapshot)
break
case firebase.auth.PhoneAuthState.AUTO_VERIFY_TIMEOUT:
UserStore.setVerificationId(phoneAuthSnapshot.verificationId)
UserStore.setErrorCodeAuthentication('SMS code has expired')
res(phoneAuthSnapshot)
case firebase.auth.PhoneAuthState.ERROR:
console.log(phoneAuthSnapshot.error.code)
if (phoneAuthSnapshot.error) {
this.showMessageErrorByCode(phoneAuthSnapshot.error.code)
}
rej(phoneAuthSnapshot)
break
}
})
})
}
confirmCode = async(verificationId, code, phoneAuthSnapshot) => {
console.log(verificationId, code);
try {
const credential = await firebase.auth.PhoneAuthProvider.credential(verificationId, code)
UserStore.setCodeInput(code)
UserStore.setUserCredentials(credential)
AppStore.setAlreadyVerifiedAuto(true)
await this.authenticate(credential)
return credential
} catch (e) {
console.log(e)
this.showMessageErrorByCode(e.error.code)
// throw new Error(e)
}
}
showMessageErrorByCode(errorcode) {
switch (errorcode) {
case 'auth/invalid-phone-number':
UserStore.setErrorCodeAuthentication('Please enter valid phone number');
break;
case 'auth/unknown':
{
UserStore.setErrorCodeAuthentication('User blocked by firebase');
break;
}
case 'auth/session-expired':
{
UserStore.setErrorCodeAuthentication('SMS code has expired');
break;
}
case 'auth/invalid-verification-code':
{
UserStore.setErrorCodeAuthentication('Code verification not correct');
break;
}
default:
UserStore.setErrorCodeAuthentication('other error');
}
}
authenticate = async(credential) => {
await firebase.auth().signInAndRetrieveDataWithCredential(credential)
}
//...
Check the following:
Hope you find it helpful.
I think this can happen if the bundle id of the app trying to access firebase doesn't match the bundle id registered in the firebase console.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With