2017-09-12 2 views
0
function signInWithGoogle(){ 
//console.log("clicked signInWithGoogle"); 
firebase.auth().onAuthStateChanged(function(user){ 
    if(user){ 
     alert("Already logged in"); 
    } 
    else{ 
     // var info=document.getElementById("info"); 
     var provider=new firebase.auth.GoogleAuthProvider(); 
     firebase.auth().signInWithPopup(provider).then(function(result){ 
      if(result.credential){ 
       var token=result.credential.accessToken; 

       console.log("token="+token); 
      } 
      var user=result.user; 
      console.log("user_provider="+user.displayName+" user_email="+user.email+" user_dp="+user.photoURL+" user_verification="+user.emailVerified+" uid="+user.uid); 
     }).catch(function(error){ 
      var errorCode=error.code; 
      var errorMessage=error.message; 
      var email=error.email; 
      var credential=error.credential; 
      alert(errorMessage); 
     }); 
    } 
}); 
} 

Wenn ein Benutzer in zum ersten Mal, die Anmelde-Prozess geht gut, aber danach wird eine Warnmeldung („Schon angemeldet“) wird angezeigt, das zeigt an, dass onAuthStateChanged noch einmal aufgerufen wird. Wie kann man es nicht noch einmal aufrufen?onAuthStateChanged wird aufgerufen, zweimal, während die Funktion in dem er sich befindet nur einmal aufgerufen wird

Ich bin sicher, dass diese signInWithGoogle() einmal aufgerufen wird.

P.S. Ich habe viele Fragen dazu gesehen, aber sie haben keine konkrete Lösung.

+0

Als erstes sollten Sie 'onAuthStateChanged' nicht innerhalb von' signInWithGoogle' platzieren. –

+0

signInWithGoogle ist nur ein Funktionsname, die Funktion wird nur aufgerufen, wenn der Benutzer auf eine Schaltfläche klickt. Auch wenn ich durch eine andere ersetzt habe, besteht das Problem weiterhin. –

+1

Ich sage nur, dass 'onAuthStateChanged' nicht in irgendeiner Funktion sein sollte. Wenn "signInWithGoogle" (oder eine andere Funktion) den Benutzer in "onAuthStateChanged" signiert, wird er aufgerufen. –

Antwort

0

onAuthStateChanged wird zum ersten Mal aufgerufen, wenn der Benutzer nicht angemeldet ist, Sie signInWithPopup. Dies führt dazu, dass sich der Benutzer anmeldet und denselben Beobachter erneut auslöst, und daher die Warnmeldung. Ich stimme der Einschätzung von @ camden_kid zu. Aber wenn Sie in Funktion in einem Schild auf das Hinzufügen dieser Beobachter darauf bestehen, können Sie sich abmelden, wenn es zuerst genannt wird:

var unsubscribe = firebase.auth().onAuthStateChanged(function(user){ 
    unsubscribe(); 
    ... 
}); 

Dies würde garantieren, es wird aufgerufen, sobald jedes Mal, wenn Sie diese Funktion aufrufen.

Verwandte Themen