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.
Als erstes sollten Sie 'onAuthStateChanged' nicht innerhalb von' signInWithGoogle' platzieren. –
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. –
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. –