为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)
Posted
技术标签:
【中文标题】为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)【英文标题】:Why does my firebase onAuthStateChanged() trigger multiple times? (React Native)为什么我的 firebase onAuthStateChanged() 触发多次? (反应原生) 【发布时间】:2018-09-27 03:10:45 【问题描述】:我的firebase
方法onAuthStateChanged()
在我根据console.log
使用firebase-authentication
登录和注销时触发了几次。它不应该只在登录和注销时触发一次吗?结果是在退出时,多次触发到上一页的导航。代码如下:
componentDidMount()
fbAuth.onAuthStateChanged(user => this.loginFunc(user));
loginFunc(user)
if (user)
console.log('LOGGED IN');
else
console.log('LOGGED OUT');
this.props.navigation.navigate('FbLogin');
console.log('onAUTH LOGGED IN: ', user);
这就是控制台的样子。如您所见,只需单击一次注销即可触发登录和注销。在登录时,它会触发两次......
LOGGED OUT
FbLogin.js:46 onAUTH: null
LoggedIn.js:27 LOGGED OUT
LoggedIn.js:30 onAUTH LOGGED IN: null
FbLogin.js:44 LOGGED OUT
FbLogin.js:46 onAUTH: null
我的注销按钮如下所示:
<TouchableHighlight //LOGOUT
style=
...
onPress=() =>
fbAuth.signOut();
this.setState( loginState: "You are logged out" );
>
<Text>Logout</Text>
</TouchableHighlight>
【问题讨论】:
在您的控制台消息中,似乎有两个类在编写消息:FbLogin.js
和 LoggedIn.js
。还是我读错了?
【参考方案1】:
是的,这很正常,onAuthStateChanged 会一直触发, 我通过使用以下代码解决了这个问题:
var authFlag = true;
Firebase.onAuthStateChanged( user =>
if(authFlag)
authFlag = false;
if (user)
// Do something,
else
// Alert.alert("Auth Error")
);
【讨论】:
为什么即使我们没有更改身份验证,它也会继续触发?你有任何关于它的文档 在这里找到了这篇文章,它对我有用,我也觉得上面的答案更优雅。 ***.com/questions/47376453/… 这个答案需要被否决。代码不会阻止它触发,只是避免调用内部行。注销呢?以上是关于为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)的主要内容,如果未能解决你的问题,请参考以下文章
FirebaseError:权限缺失或不足。 -类星体和火力基地
为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)