1

我完全意識到在註冊後立即觸發了AuthStateChange函數,但事實並非如此。在用戶使用其用戶名和密碼登錄後,我遇到此功能的兩次問題。第一次啓動時,我追溯到堆棧,它來自我的代碼,但第二次來自Firebase JS文件本身。我很困惑,因爲我不明白他們爲什麼會起火。我正在使用網絡版的Firebase。代碼在下面提供。Firebase onAuthStateChange在登錄時觸發兩次

TL; DR:我正在使用Web版的Firebase。在用戶使用其用戶名和密碼登錄後,onAuthStateChange函數會觸發兩次。

// callback function 
firebase.auth().onAuthStateChanged(function(user) { 
    console.log("change"); 
    if (authCounter == 0) { 
     authCounter = 1; 
    } else { 
     if (user) { 
      currentUser = user.uid; 
      dbRef = firebase.database().ref().child(currentUser); 
      handleEvent(9); 
     } else { 
      handleEvent(10); 
     } 
    } 
}); 

// sign in function 
firebase.auth().signInWithEmailAndPassword(email, pass).catch(function(error) { 
      displayError(error.code); 
     }); 

回答

0

您的代碼似乎沒有任何錯誤。

我以前有同樣的問題。我認爲這個監聽器被調用了兩次,但事實上,它是被不必要地調用兩次/不必要的登錄函數(你不需要註銷登錄,所以一切看起來都很好,除了監聽器被解僱了兩次)。

此外,您在重新加載頁面時未自動註銷,因此當您第二次調用登錄功能時,您可能已經登錄(第一次觸發)。

這就是我能想到的,希望這會讓您朝着正確的方向前進。