Проверьте, существует ли пользователь Google в приложении firebase-react - PullRequest
1 голос
/ 11 июля 2020

Я создаю приложение для реагирования, используя firebase для входа. Когда я вызываю метод входа в Google, я хочу иметь возможность определять, существует ли пользователь в нашей коллекции UserStorage (уже зарегистрировался ранее), если они этого не сделали, он должен направить их в компонент регистрации, в противном случае он должен направить их к фитнес-компоненту. Из компонента мы обрабатываем вход с помощью:

async handleGoogleSignIn(event) {

  event.preventDefault();
  this.props.googleSignIn(this.state);
  try {
    const bool = await this.isExistingUser()
    if(bool == true) {
      this.props.history.push('/fitness');
    } else {
      this.props.history.push('/signup');
    }
  } catch (error) {
    this.props.history.push('/home');
  }
}

isExistingUser определяется как:

isExistingUser() {

  var id = ''
  firebase.auth().onAuthStateChanged(function(user) {
    try {
      if (user) {
        id = user.uid
        for (var i = 0; i < this.props.fetchedUser.length; i++) {
          if(this.props.fetchedUser[i].id == id) {
            return true;
          }
        }
        return false;
      } else {
        console.log('No user is signed in.')
      }
    } catch (error) {
      console.log('ERROR: ', error)
    }
  });
  return false;  
}

this.props.fetchedUser должен иметь список всех пользователей, которые мы сохранили в out, а метод входа в Google, который мы получаем из реквизита:

export const googleSignIn = () => {
  return (dispatch, getState, {getFirebase, getFirestore}) => {
    const firebase = getFirebase();
    const firestore = getFirestore();
    const provider = new firebase.auth.GoogleAuthProvider()
    firebase.auth().signInWithRedirect(provider).then(async result => {
      var user = result.user;
      console.log('GOOGLE SIGN IN: ', user)
    }).then(() => {
      dispatch({ type: 'GOOGLE_LOGIN_SUCCESS' });
    }).catch((error) => {
      dispatch({ type: 'GOOGLE_LOGIN_ERROR', error });
    });
  }
};

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

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