Аутентификация телефонного номера Firebase: неверный идентификационный номер, использованный для создания аутентификации телефона - PullRequest
0 голосов
/ 14 марта 2020

Пользователи моего приложения больше не могут проверять коды 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 предоставлять верификационный идентификатор, который нельзя использовать?

Любые идеи относительно того, как я могу это исправить, очень ценятся!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...