Реагировать на асинхронный вход в систему через социальные сети - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь добавить логин с социальными сетями на моем веб-сайте, но я получил некоторые ошибки, потому что дело возвращается сначала до моего HTTP-запроса (Firebase):

firebase.auth().signInWithPopup

Как я могу каким-то образом использовать асинхронную функцию для case ожидания до завершения запроса?

Вот код:

    login(provider, info) {
      switch (provider) {
        case this.EMAIL:
          return firebaseAuth().signInWithEmailAndPassword(
          info.email,
          info.password
          ); 
          break;
        case this.EMAILREGISTER:
          break;
        case this.GOOGLE:
          var providerr = new firebase.auth.GoogleAuthProvider();
            firebase.auth().signInWithPopup(providerr).then(function(result) {
            // This gives you a Facebook Access Token. You can use it to access the Facebook API.
            var token = result.credential.accessToken;
            // The signed-in user info.
            var user = result.user;
            console.log(result);
            // ...
          }).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;
            console.log(error);
           // ...
          });  
          //Right here I need to return the token and user async
        break;
      }
    }
    //here is the function who is calling:
    handleLogin = () => {
        const { email, password } = this.state;
        if (!(email && password)) {
          notification('error', 'Favor informar o email e senha');
          return;
        }
        this.setState({
          confirmLoading: true
        });
        const self = this;
        let isError = false;
        Firebase.login(Firebase.Google, '')
          .catch(result => {
            const message =
              ......
       });
    }

1 Ответ

0 голосов
/ 24 августа 2018

Вы можете попробовать использовать async / await, чтобы он дождался возвращения данных. Примерно так, только для начала:

       async login(provider, info) {
             try {
              switch (provider) {
                case this.EMAIL:
                  return firebaseAuth().signInWithEmailAndPassword(
                  info.email,
                  info.password
                  ); 
                  break;
                case this.EMAILREGISTER:
                  break;
                case this.GOOGLE:
                  var providerr = new firebase.auth.GoogleAuthProvider();
     // This gives you a Facebook Access Token. You can use it to access the Facebook API.
                    var result = await firebase.auth().signInWithPopup(providerr);
                    var token = result.credential.accessToken;
                    // The signed-in user info.
                    var user = result.user;
                    console.log(result);
                    // ...
                     break;
                  }
    }
    catch(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;
                    console.log(error);
                   // ...
                  } 
              }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...