Firebase停止侦听onAuthStateChanged

时间:2016-05-22 03:25:05

标签: javascript firebase firebase-authentication

从版本^ 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);

但是没有做任何事情。

2 个答案:

答案 0 :(得分:75)

根据the documentationonAuthStateChanged()函数返回

  

观察者的取消订阅功能。

所以你可以:

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

然后:

unsubscribe();

答案 1 :(得分:0)

Frank van Puffelen已经很好地回答了这个问题,但是这是我获取用户数据的React组件的用例。这些组件在卸载时需要取消订阅,否则每个组件都会发生内存泄漏。

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