簡體   English   中英

Firebase 停止監聽 onAuthStateChanged

[英]Firebase stop listening onAuthStateChanged

從版本 ^3.0.0 開始,我很難刪除身份驗證狀態更改偵聽器。

要根據文檔啟動偵聽器:

firebase.auth().onAuthStateChanged(function (user) {
    // handle it
});

但是,我在文檔中找不到任何提到刪除身份驗證狀態更改偵聽器的地方。 Firebase.Auth 類上有一個特殊的函數,稱為removeAuthTokenListener 不幸的是,它沒有記錄( firebase docs reference )。

通過瀏覽器的 Web 控制台。

var auth = firebase.auth();
auth.removeAuthTokenListener;

打印一個接受一個參數的函數定義。 我嘗試執行以下操作:

this.authListener = firebase.auth().onAuthStateChanged(function (user) {...});
firebase.auth().removeAuthTokenListener(this.authListener);

但這沒有做任何事情。

根據文檔onAuthStateChanged()函數返回

觀察者的取消訂閱功能。

所以你可以:

var unsubscribe = firebase.auth().onAuthStateChanged(function (user) {
    // handle it
});

然后:

unsubscribe();

Frank van Puffelen 已經很好地回答了這個問題,但這是我獲取用戶數據的 React 組件的用例。 這些組件需要在卸載組件時取消訂閱,否則每個組件都會出現內存泄漏。

React.useEffect(() => {
  let unsubscribe;
  const getUser = async () => {
    unsubscribe = await firebase.checkUserAuth(user => setUser(user));
  };
  getUser();
  return function cleanup() {
    unsubscribe();
  };
}, []);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM