Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase phone auth Error: Invalid token. at nativeToJSError

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

enter image description here

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)

}

//...
like image 763
Manspof Avatar asked May 17 '18 11:05

Manspof


2 Answers

Check the following:

  • Correct bundle Id
  • Correct Google-Info.plist
  • Correct aps-environment value
  • Upload the APNS authentication key (p8) instead of certificates

Hope you find it helpful.

like image 95
CallofDev Avatar answered Nov 18 '22 01:11

CallofDev


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.

like image 1
ganski Avatar answered Nov 18 '22 03:11

ganski