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);
});
}
});
}
当用户第一次登录时,登录过程进展顺利但在此之后会显示一条警告消息(“已经登录”),表示再次调用onAuthStateChanged。如何使其不被调用再次?
我确信signInWithGoogle()会被调用一次。
P.S。我已经看到很多与此相关的问题,但他们没有任何具体的解决方案。
答案 0 :(得分:0)
onAuthStateChanged
,signInWithPopup
。这会导致用户登录,再次触发相同的观察者,从而触发警报消息。
我同意@ camden_kid的评估。但是如果你坚持在登录功能中添加这个观察者,你可以在第一次调用它时取消订阅:
var unsubscribe = firebase.auth().onAuthStateChanged(function(user){
unsubscribe();
...
});
这可以保证每次调用此函数时都会调用它。