繁体   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