2016-09-08 71 views
6

當用戶訪問我的站點時,我使用onAuthStateChanged來確定用戶是否已從前一會話登錄。onAuthStateChanged不一致

主要問題是,對於一小部分用戶來說它不一致 - 代碼似乎沒有檢測到他們確實有一個有效的登錄會話正在進行。

以下代碼位於應用程序本身上,用戶在頁面或登錄頁面重定向後即會在該頁面上顯示。

該網站的主頁還使用onAuthStateChanged來確定用戶是否應直接重定向到應用程序。登錄頁面使用signInWithEmailAndPassword,當登錄成功時,將它們重定向到應用程序頁面(具有以下代碼)。

firebase.auth().onAuthStateChanged(function (authUser) { 
    if (authUser) return initApp(authUser); 

    // issue: sometimes users that *should* be signed-in get signed in anonymously here 
    firebase.auth().signInAnonymously().then(function (authUser) { 
    initApp(authUser); 
    } 
}); 

onAuthStateChanged只是不是我應該用於我的用例?任何想法如何改善/解決這個問題?

編輯:這SEEMS發生更多的用戶在手機上。

+1

確保您在登錄頁面重定向之前等待signInWithEmailAndPassword解決。這可能是因爲你提前重定向到應用程序頁面。上面的代碼也會在匿名登錄時調用兩次initApp,因爲onAuthStateChanged觀察者將在匿名登錄後再次觸發。 – bojeil

+0

謝謝。右鍵 - 代碼再次運行,但我在'initApp'函數中有'userInitiated'變量來正確處理已經登錄的用戶。即使用戶由於WiFi連接丟失或隨機Firebase重新連接而重新連接,但需要恢復initApp功能以恢復以前的聯機狀態。 –

+0

是的,我一直在確保signInWithEmailAndPassword在重定向之前得到解決。 –

回答