Firebase 停止监听 onAuthStateChanged
Firebase stop listening onAuthStateChanged
从版本 ^3.0.0 开始,我很难删除身份验证状态更改侦听器。
根据文档启动侦听器:
firebase.auth().onAuthStateChanged(function (user) {
// handle it
});
但是,我在文档中找不到引用删除身份验证状态更改侦听器的任何地方。 Firebase.Auth class 上有一个特殊的函数叫做 removeAuthTokenListener
。不幸的是,它没有记录 (firebase docs reference)。
通过浏览器的网络控制台。
var auth = firebase.auth();
auth.removeAuthTokenListener;
打印一个带有一个参数的函数定义。我尝试执行以下操作:
this.authListener = firebase.auth().onAuthStateChanged(function (user) {...});
firebase.auth().removeAuthTokenListener(this.authListener);
但这并没有起到任何作用。
根据the documentation,onAuthStateChanged()
函数returns
The unsubscribe function for the observer.
所以你可以:
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 unsubscribe;
}, []);
从版本 ^3.0.0 开始,我很难删除身份验证状态更改侦听器。
根据文档启动侦听器:
firebase.auth().onAuthStateChanged(function (user) {
// handle it
});
但是,我在文档中找不到引用删除身份验证状态更改侦听器的任何地方。 Firebase.Auth class 上有一个特殊的函数叫做 removeAuthTokenListener
。不幸的是,它没有记录 (firebase docs reference)。
通过浏览器的网络控制台。
var auth = firebase.auth();
auth.removeAuthTokenListener;
打印一个带有一个参数的函数定义。我尝试执行以下操作:
this.authListener = firebase.auth().onAuthStateChanged(function (user) {...});
firebase.auth().removeAuthTokenListener(this.authListener);
但这并没有起到任何作用。
根据the documentation,onAuthStateChanged()
函数returns
The unsubscribe function for the observer.
所以你可以:
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 unsubscribe;
}, []);