我正在開發一個使用Ionic 3和Firebase作爲身份驗證提供程序的混合應用程序。該應用程序包含2頁。登錄頁面和主頁。在登錄頁面上有一個按鈕,使用電子郵件+密碼登錄用戶,在主頁上有另一個按鈕登出當前用戶。基本上,應用程序第一次加載一切正常。但是,在登錄後,然後註銷,然後再次登錄onAuthStateChange中的函數被調用兩次,然後三次,然後是斐波那契數列之後的五次。 這是登錄頁面代碼:firebase onAuthStateChanged遵循Fibonacci的系列
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log('User logged-in');
if (user.emailVerified) {
self.goToHome();
} else {
self.showAlert();
firebase.auth().signOut();
}
}
});
}
,這是註銷代碼:
firebase.auth().onAuthStateChanged(function(user) {
if (user == null) {
console.log('User logged-out');
navCtrl.push(WelcomePage);
}
});
鉻控制檯顯示此行爲:
(將在圖像結束的錯誤是我的故障,因爲我使用了錯誤的密碼)
移動用戶主頁doLogin() {
console.log('Trying to log in...');
var email = this.account.email;
var password = this.account.password;
if (this.validateEmail(email) && password.length >= 8) {
loading.present();
firebase.auth().signInWithEmailAndPassword(email, password)
.then(function(data) {
loading.dismiss();
});
}
logout() {
firebase.auth().signOut();
}
功能goToHome:
goToHome() {
this.navCtrl.push(MainPage);
}
(但我99%肯定問題onAuthStateChanged)由按鈕叫個
功能解決方案在他的評論中指出Ben:
1:從onAuthStateChanged移動所有navController相關的功能2:使用setRoot而不是流行()和推()
goToHome() {
this.navCtrl.setRoot(HomePage);
}
logout() {
firebase.auth().signOut();
this.navCtrl.setRoot(WelcomePage);
}
3)要解決能夠自動登錄用戶,如果他/她沒有登出我檢查 如果firebase.auth() .currentuser存在,但使用超時,因爲 火力地堡需要一些時間正常運行前:
setTimeout(function(){
var user = firebase.auth().currentUser;
if (user != null) {
self.goToHome();
}
}, 1500);
請再提一下你的'component'路由邏輯。這是做什麼'self.goToHome();'? – Hareesh