Google Firebase Authentication с Expo ничего не возвращает - PullRequest
0 голосов
/ 09 марта 2019

Я создаю приложение expo, в котором пользователь может войти в систему с помощью Gmail.

Я следовал этой документации Firebase , чтобы реализовать эту функцию, но всякий раз, когда я нажимаю на кнопку входа, она нене сохраняйте данные в базе данных и не возвращайте никаких ошибок.

Это моя базовая функция:

isUserEqual = (googleUser, firebaseUser)=> {
  if (firebaseUser) {
    var providerData = firebaseUser.providerData;
    for (var i = 0; i < providerData.length; i++) {
      if (providerData[i].providerId === firebase.auth.GoogleAuthProvider.PROVIDER_ID &&
          providerData[i].uid === googleUser.getBasicProfile().getId()) {
        // We don't need to reauth the Firebase connection.
        return true;
      }
    }
  }
  return false;
}

onSignIn = (googleUser)=> {
  console.log('Google Auth Response', googleUser);
  // We need to register an Observer on Firebase Auth to make sure auth is initialized.
  var unsubscribe = firebase
  .auth()
  .onAuthStateChanged(function(firebaseUser) {
    unsubscribe();
    // Check if we are already signed-in Firebase with the correct user.
    if (!this.isUserEqual(googleUser, firebaseUser)) {
      // Build Firebase credential with the Google ID token.
      var credential = firebase.auth.GoogleAuthProvider.credential(
          googleUser.idToken,
          googleUser.accessToken
          );
      // Sign in with credential from the Google user.
      firebase.auth()
      .signInAndRetrieveDataWithCredential(credential)
      .then(function(result) {
        console.log('User signed in');
      })
      .catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
        // ...
      });
    } else {
      console.log('User already signed-in Firebase.');
    }
  }.bind(this)
  );
};

signInWithGoogleAsync = async() => {
  try {
    const result = await Expo.Google.logInAsync({
      behavior: 'web',
      androidClientId: '929952027781-5ao9pp7n5n0sj2n70i5tp7klfro88bgp.apps.googleusercontent.com',
      iosClientId: '929952027781-7obs66o3kr59kdhp6ll0c9598ue3u8aa.apps.googleusercontent.com',
      scopes: ['profile', 'email'],
    });

    if (result.type === 'success') {
      this.onSignIn(result);
      return result.accessToken;
    } else {
      return {cancelled: true};
    }
  } catch(e) {
    return {error: true};
  }
}

И это моя кнопка входа:

<TouchableOpacity style={styles.AuthOptionGmail}  onPress={() => signInWithGoogleAsync()}>
          <Ionicons color='#ffffff' style = {styles.BtnIcon} name="logo-google" size={25}/>
          <Text style={{fontSize:16,color:'#ffffff', textAlign:'center'}}>Login with Gmail</Text>
        </TouchableOpacity>

Может кто-нибудь сказать мне, где я напортачил, пожалуйста ????

...