реагирует на собственную ошибку TypeError: невозможно прочитать свойство 'navigation' из неопределенного

1

Я использую FacebookAuthProvider firebase для входа моих пользователей с моей платформы.

Я использую реакцию native в expo с firestore, и она отлично работает, пока я не попытался добавить некоторые проверки, чтобы перенаправить пользователей на правильные экраны после входа в систему. Существуют две разные роли (администраторы и пользователи), которые должны быть раздельными сразу после входа в систему.

if (/* user is administrator */) {
  this.props.navigation.navigate('Admin');
} else {
  this.props.navigation.navigate('Main');
}

После добавления этого метода для разделения пользователей этими ролями я получил эту ошибку:

реагировать на родной TypeError: не удается прочитать свойство "навигация" неопределенного

Позже я добавлю несколько подробностей (файлы журналов и т.д., Как только узнаю, как их удалить из моей языковой машины).

Чтобы лучше понять, я поставил здесь весь свой код (извините за плохие отступы, которые уменьшают читаемость):

const auth = firebase.auth();
const firebaseUser = '';
const usersRef = firebase.firestore().collection('users');

async handleFacebookButton() {

const { type, token,  } = await Facebook.logInWithReadPermissionsAsync(FACEBOOK_APP_ID, {
  permissions: ['public_profile', 'email']
});
if (type === 'success') {
  //Firebase credential is created with the Facebook access token.
  const credential = firebase.auth.FacebookAuthProvider.credential(token);
  auth.signInAndRetrieveDataWithCredential(credential)
  .then(function(userCredential) {
    newUserCheck = userCredential.additionalUserInfo.isNewUser;
    console.log('newUserCheck = ', newUserCheck)
  });
  this.setState({loggedIn: "You are signed in"})
  this.setState({signedIn: true})
  console.log('you are signed in');


firebase.auth().onAuthStateChanged(function(user) {
if (user) {

  firebaseUser = {name: user.displayName, uid: user.uid, email: user.email}
  console.log(firebaseUser.name, ' and ',  firebaseUser.uid);

    var existingRef = usersRef.doc(firebaseUser.uid);
    existingRef.get().then(function(documentSnapshot) {
      // check if user is registered
        if(documentSnapshot) {
          data = documentSnapshot.data();
          console.log('existing user exists!!');
            // check if user is an administrator
            if (data.administrator == true) {
                console.log('existing administrator exists!!');

                this.props.navigation.navigate('Admin');
              } else { this.props.navigation.navigate('Main');
                }
        }
    });

    (error => {   
      console.log('user not accessed: ', error);
    });

    //User is not yet in firebase database and needs to be saved
    // double check that user is a new user
    if (newUserCheck == true) {
    this.ref
          .doc(uid)
          .set({
            id: firebaseUser.uid,
            username: firebaseUser.name,
            email: firebaseUser.email,
          })
    this.props.navigation.navigate('ChooseRoute')
  }
}
})
}
  // If login type is not success:
  (error => {   
    this.setState({loggedIn: "Login failed: log in again"})
    this.setState({ errorMessage: error.message });

    });
}
  • 0
    Подумайте о том, чтобы сосредоточиться на главной проблеме, она должна быть мелкозернистой, вместо того, чтобы выкидывать весь код в простую аудиторию и пытаться найти иголку в стоге сена. Не позволяйте другим работать, пока вы хотите, чтобы они помогли вам.
  • 0
    И именно поэтому я не использую «ТАК» так много ... как относительный новичок. Я понятия не имею, где проблема в этой функции, но я постарался быть максимально конкретным в этом вопросе - однако, если вы не мне не нравится мой вопрос, не стесняйтесь двигаться дальше, не отвечая ....
Показать ещё 3 комментария
Теги:
react-native
google-cloud-firestore
react-navigation

1 ответ

0

Я починил это!! 3 дня спустя - это была проблема с привязкой - после нескольких неудачных попыток разобраться, какие были правильные части функций для привязки, я преобразовал как "auth(), так и onAuthStateChanged" и "documentSnapshot" в функции толстых стрелок, и ошибки исчезли !! Слава богу за ES6...! Надеюсь, это поможет кому-то еще по линии...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню